Ответ 1
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);
Я хочу написать script, с функцией для множественного запроса на вставку. позвольте мне объяснить это лучше.
У меня есть один вход quantity
в форме html.
и у меня есть запрос MySQL, чтобы вставить registered user
в таблицу.
поэтому я хочу, чтобы моя функция вставляла этот запрос в "количество" раз.
mysql_query("INSERT INTO `pxlot` (realname,email,address,phone,status,regtime,ip)
VALUES ('$realname','$email','$address','$phone','0','$dateTime','$ip')")
or die (mysql_error()); // Inserts the user.
Вставить это, например, 3 раза. Какие-либо предложения?
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);
Вот несколько способов сделать это
INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip)
select '$realname','$email','$address','$phone','0','$dateTime','$ip'
from SOMETABLEWITHTONSOFROWS LIMIT 3;
или
INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip)
select '$realname','$email','$address','$phone','0','$dateTime','$ip'
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip'
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip'
или
INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip)
values ('$realname','$email','$address','$phone','0','$dateTime','$ip')
,('$realname','$email','$address','$phone','0','$dateTime','$ip')
,('$realname','$email','$address','$phone','0','$dateTime','$ip')
В большинстве случаев вставка нескольких записей с одним оператором Insert намного быстрее в MySQL, чем вставка записей с циклом for/for в PHP.
Предположим, что $column1 и $column2 представляют собой массивы с одинаковым размером, размещенные в форме html.
Вы можете создать свой запрос следующим образом:
<?php
$query = 'INSERT INTO TABLE (`column1`, `column2`) VALUES ';
$query_parts = array();
for($x=0; $x<count($column1); $x++){
$query_parts[] = "('" . $column1[$x] . "', '" . $column2[$x] . "')";
}
echo $query .= implode(',', $query_parts);
?>
Если данные отправляются для двух записей, запрос будет выглядеть следующим образом:
ВСТАВИТЬ В ТАБЛИЦУ (
column1
,column2
) ЗНАЧЕНИЯ ( "данные", "данные" ), ( "данные", "данные" )
Если вы хотите вставить несколько значений, скажем, из нескольких входов, которые имеют разные значения post, но та же самая таблица для вставки, а затем просто используйте:
mysql_query("INSERT INTO `table` (a,b,c,d,e,f,g) VALUES
('$a','$b','$c','$d','$e','$f','$g'),
('$a','$b','$c','$d','$e','$f','$g'),
('$a','$b','$c','$d','$e','$f','$g')")
or die (mysql_error()); // Inserts 3 times in 3 different rows
Используйте функцию ниже, чтобы вставить несколько строк в одном запросе
function multiple_insert($table, $fields = array(), $values = array(), $appendix = false, $ret = false) {
$query = 'INSERT INTO';
$query .= ' '' . $this->escape($table) . "'";
if (is_array($fields)) {
$query .= ' (';
$num = 0;
foreach ($fields as $key => $value) {
$query .= ' '' . $value . ''';
$num++;
if ($num != count($fields)) {
$query .= ',';
}
}
$query .= ' ) VALUES ';
foreach ($values as $key => $value) {
$query .= '(';
foreach ($value as $key => $value) {
$query .= "'" . $value . "'" . ',';
}
$query = rtrim($query, ',');
$query .= '),';
}
$query = rtrim($query, ',');
if ($appendix) {
$query .= ' ' . $appendix;
}
if ($ret) {
return $query;
}
$this->sql = $query;
$this->result = mysqli_query($this->mysql, $query);
if (mysqli_error($this->mysql) != '') {
$this->_error(mysqli_error($this->mysql));
$this->result = null;
return false;
} else {
return $this;
}
}
}
и вот как вы будете использовать функцию
$values_array = array(
['videoid1' , 'chneneid1' , 'descitpin1'] ,
['videoid2' , 'chneneid3' , 'descitpin3']
);
$table_columns = array('video_id' , 'channelId' , 'description');
multiple_insert($table_name , $table_columns , $values_array );
<?php
$datas = ['1','2','3'];
$datas = ['1','2','3'];
foreach ($datas as $key => $data) {
$query_value[] = "('" . $data . "', '" . $datas[$key] . "')";
}
echo $value_string = implode(",", $query_value);
?>
Здесь я использовал forech для многострочной вставки.. Мой код в php и mysqli.. Моя первая страница - Add_timetable.php, она выглядит примерно так:Предварительный просмотр Add_timetable.php Предварительный просмотр результатов выглядит следующим образом..Предварительный просмотр результатов
Эта страница называется Add_timetable1.php
foreach($_POST['days'] as $row=>$Days)
{include 'dbcon.php';
$s=mysqli_real_escape_string($conn,($_POST['cl']));
$n=mysqli_real_escape_string($conn,($_POST['di']));
$g=mysqli_real_escape_string($conn,($_POST['days'][$row]));
//echo $g[$i];
$a=mysqli_real_escape_string($conn,($_POST['p1'][$row]));
$b=mysqli_real_escape_string($conn,($_POST['p2'][$row]));
$c=mysqli_real_escape_string($conn,($_POST['p3'][$row]));
$d=mysqli_real_escape_string($conn,($_POST['p4'][$row]));
$e=mysqli_real_escape_string($conn,($_POST['p5'][$row]));
$ins=mysqli_query($conn,"select Timetable_Id from key_table");
while ($row=mysqli_fetch_assoc($ins))
{
$att=$row['Timetable_Id']+1;
$_SESSION['pp']=$att;
}
$ttid=$_SESSION['pp'];
$ins1=mysqli_multi_query($conn,"insert into
tbl_timetable(T_Id,Class,Division,Days,period1,period2,period3,period4,period5)
values('$ttid','$s', '$n', '$g','$a','$b','$c','$d','$e')");
$upd=mysqli_query($conn,"update Key_table set Timetable_Id ='$ttid'");
//$ins2=mysqli_query($conn,"insert into tbl_login values('$u','$pas','Staff')");
}
?>
<script>
alert("Timetable added successfully");
window.location="Add_Timetable.php";
</script>
You can try this code i am it works correctly..