2012-03-10 2 views
0

Я думаю, что у меня есть небольшая ошибка в моем коде, поэтому, когда я пытаюсь добавить две записи в базу данных MySQL, она добавляет их обоих, но на данный момент она добавляет только вторую строку, должны быть введены. Например, у меня есть два поля RefTitle, два поля RefSurname и так далее! Некоторые PHP код:Несколько записей, вставляемых в MySql из формы PHP

<?php 
if(empty($err)) { 
for($i = 0; $i < 2; $i++) 
{ 
$RefTitle = $_POST['RefTitle'][$i]; 
$RefSurname = $_POST['RefSurname'][$i]; 
$RefForenames = $_POST['RefForenames'][$i]; 
$RefInstitute = $_POST['RefInstitute'][$i]; 
$RefEmail = $_POST['RefEmail'][$i]; 
$RefTelephone = $_POST['RefTelephone'][$i]; 
$EmailOK = $_POST['EmailOK'][$i]; 

$sql_insert = "INSERT into `referees` 
(`RefTitle`,`RefSurname`,`RefForenames`,`RefInstitute`, `RefEmail`,  
`RefTelephone`,`EmailOK`) 
VALUES 

('$RefTitle','$RefSurname','$RefForenames','$RefInstitute','$RefEmail',  
'$RefTelephone','$EmailOK' 
) 
"; ?> 

У меня есть [] после каждого поля имени в моем HTML форме. Спасибо

+0

где вы работаете 'mysql_query' – xbonez

+0

Где вы вызываете' mysql_query() '? Внутри петли или снаружи? Кроме того, это уязвимо для SQL-инъекции. избегайте всех '$ _POST' vars с помощью mysql_real_escape_string()' –

+0

Спасибо, ребята, я запускал его за пределами – user1257518

ответ

0

Вот что я думаю, что происходит.

В цикле вы добавляете текущий запрос к строке, перезаписывая предыдущий запрос. По завершении цикла вы запускаете mysql_query, но это будет работать только в последнем запросе, сгенерированном циклом.

У вас есть два пути, чтобы исправить это:

  1. выполнить запрос внутри цикла на каждой итерации. Псевдокод:

    для ($ i = 1 до 100) {
    $ query = // построить ваш запрос;

    mysql_query ($ query);

    }

  2. В качестве альтернативы, (и лучший способ) является использование списка значений в вашей вставки заявлении.

Вкладыш со списком значений выглядит следующим образом

INSERT INTO table VALUES (1,2,3), (4,5,6), (7,8,9) 

Таким образом, (псевдо-код еще раз)

$query = "INSERT INTO table VALUES "; 
for ($i = 1 to 100) 
{ 
    $query .= " ("; 
    $query .= "" //comma seperate the values of the current iteration 
    $query .= "),"; 
} 

// после концов петли, снимите заднюю постороннюю запятую

// Выполнение всего запроса сразу

mysql_query($query); 
+0

. Вы можете вставить в один оператор больше записей для одной и той же таблицы. это более эффективно: INSERT INTO tbl_name (a, b, c) ЗНАЧЕНИЯ (1,2,3), (4,5,6), (7,8,9); – Roger

Смежные вопросы