2014-08-30 7 views
0

Хороший день,PHP и MySQLi множественная вставка - Ошибка

У меня трудности с MySQLi несколькими вставками. У меня есть этот db, который состоит из 6 разных таблиц, каждый из которых имеет eid как foreign key от employees. Вот список таблиц: employees (который конечно держит primary key для eid), затем contact, education, job_desc, work_history, familybg

Что у меня возникают проблемы с когда я попытался вставить данные взяты из форм страницы индекса в insert.php, где вызывается функция MySQLi. Вы могли видеть код ниже:

[ПРИМЕЧАНИЕ: Следующие атрибуты просто манекен.]

insert.php (пересмотренная)

include('db.php'); 

//build sql statements 
<?php 

$sql1 = "INSERT INTO employee (fname,mname, 
    lname,age, 
    gender,birthday, 
    birthplace,citizenship, 
    status,sss, 
    philhealth,tin, 
    height,weight) 
     VALUES 
     ('$fname','$mname','$surname', 
     '$age','$gender', 
     '$birth','$place', 
     '$citizen','$civil', 
     '$ss','$phil','$tin', 
     '$height','$weight')"; 

     $r1 = mysqli_query($db,$sql1); 
     $id = mysqli_insert_id($db); 

$sql2 = "INSERT INTO contact (eid,address,province,postcode,telno,mobile,email,alternate) 
     VALUES('$id','$address','$province','$postcode','$tel','$mob','$email','$alter')"; 

$sql3 = "INSERT INTO educ (eid,elem,egrad,highschool,hgrad,college,cgrad) VALUES ('$id','$elem','$egrad','$high','$hgrad','$col','$cgrad')"; 

$sql4 = "INSERT INTO employment (eid,position,status,hireDate,job_desc,basic,salary) VALUES ('$id','$pose','$stat','$hstart','$dept','$pay','$salary')"; 

$sql5 = "INSERT INTO work (eid,company_name,position,desc,startDate,endDate) VALUES ('$id','$prev','$pold','$job','$sdate','$edate')"; 

$sql6 = "INSERT INTO family (eid,fatherName,motherName,sibling,spouse,children) VALUES ('$id','$dad','$mom','$kname','$spouse','$child')"; 


//returns 1 if sucessful and 0 if not 
//mysqli_query($link,$query) 

$r2 = mysqli_query($db,$sql2) or die(mysqli_error($db)); 
$r3 = mysqli_query($db,$sql3) or die(mysqli_error($db)); 
$r4 = mysqli_query($db,$sql4) or die(mysqli_error($db)); 
$r5 = mysqli_query($db,$sql5) or die(mysqli_error($db)); 
$r6 = mysqli_query($db,$sql6) or die(mysqli_error($db)); 

$sqlResult = $r2 && $r3 && $r4 && $r5 && $r6; 


//commit the queries if no errors otherwise rollback 
if(!$sqlResult){ 
//sqlResult = 0, thus there was a problem 
mysqli_rollback($db); 
echo "ERROR: Could not save data!"; 


}else{ 
//sqlResult = 1, no problem 
mysqli_commit($db); 
echo "Record saved!"; 
} 


mysqli_close($db); 

?> 

Выходные показывает: ERROR: Could not save data!, когда я попытался запустить программа. Это подразумевает, что оператор insert не может продолжаться и, таким образом, возвращается к mysqli_rollback(); Сначала я подумал, что, возможно, это имеет какое-то отношение к цитатам, но после десятка случаев проверки, наконец, я не вижу в этом виновника. Но если это не проблема, то интересно, что это было? Вы знаете, что я новичок в MySQLi. Поэтому, если кто-то, кто имеет более широкие знания об этом и даст мне несколько советов, будет оценен по достоинству.

(ток) Выпуск № 2:

После серии отладки, то mysqli multiple insert наконец работает за исключением внешнего ключа. Когда я проверил таблицу на contact, которая находится рядом с таблицей employees, столбец для eid успешно записал точное значение eid таблицы employees, но в остальной части таблицы отображается 0 для eid. Кто знает, как с этим бороться? Заранее спасибо.

ПРИМЕЧАНИЕ. Kindle проверил пересмотренный код выше, чтобы увидеть изменения и увидеть текущую проблему, имеющуюся у кодов.

+0

Вы должны использовать подготовленные заявления. Можете ли вы узнать, какое из операторов дает ошибку? – Jens

+0

@ У меня теперь проблемы с mysqli_insert_id(): 'похоже, что он не получил значение из исходной таблицы eid. Вот почему, кроме таблицы 'employee', ничего не отображается. Даже если бы я сделал это так: mysqli_insert_id ($ db); ' теперь что делать? – Archangel08

ответ

0

Порядок, в котором выполняются запросы, не очень хорош. Вы должны выполнить запрос перед использованием функции mysqli_insert_id(), чтобы получить последний вставленный идентификатор.

  • $surname дублируется в первом заявлении

Делают это так:

//build sql statements 
$sql1 = "INSERT INTO employees (fname,mname, 
    lname,age, 
    gender,birthday, 
    birthplace, 
    height,weight) 
     VALUES 
     ('$fname','$mname', 
     '$surname','$surname', 
     '$age','$gender', 
     '$birth','$place', 
     '$height','$weight')"; 

$r1 = mysqli_query($db,$sql1); 
$id = mysqli_insert_id(); 


$sql2 = "INSERT INTO contact (eid,address,province,postcode,telno,mobile,email,alternate) 
     VALUES('$id','$address','$province','$postcode','$telno','$mob','$email','$alter')"; 

$sql3 = "INSERT INTO education (eid,elem,egrad,high,college,cgrad) VALUES ('$id','$elem','$egrad','$high','$col','$cgrad')"; 

$sql4 = "INSERT INTO job_desc (eid,position,status,hireDate,department,job_desc,basic,salary) VALUES ('$id','$pose','$stat','$hstart','$dept','$pay','$salary')"; 

$sql5 = "INSERT INTO work_history (eid,company_name,position,desc,startDate,endDate) VALUES ('$id','$prev','$pold','$job','$sdate','$edate')"; 

$sql6 = "INSERT INTO familybg (eid,fatherName,motherName,sibling,spouse,children) VALUES ('$id','$dad','$mom','$kname','$spouse','$child')"; 


$r2 = mysqli_query($db,$sql2); 
$r3 = mysqli_query($db,$sql3); 
$r4 = mysqli_query($db,$sql4); 
$r5 = mysqli_query($db,$sql5); 
$r6 = mysqli_query($db,$sql6); 
+0

Спасибо @matei, я тоже сделал ваш совет, но по какой-то причине я все же получил ту же ошибку. :( – Archangel08

0

В заявлении один у вас есть столбец много:

$sql1 = "INSERT INTO employees (fname,mname, 
     lname,age, 
     gender,birthday, 
     birthplace, 
     height,weight) 
      VALUES 
      ('$fname','$mname', 
      '$surname','$surname', 
      '$age','$gender', 
      '$birth','$place', 
      '$height','$weight')"; 
      $id= mysqli_insert_id($db); 

фамилия дважды в значениях!

Instatement 4

$sql4 = "INSERT INTO job_desc (eid,position,status,hireDate,department,job_desc,basic,salary) VALUES ('$id','$pose','$stat','$hstart','$dept','$pay','$salary')"; 

это значение для столбца job_desc отсутствующего

+0

Спасибо @Jens, я удалил повторяющийся столбец в инструкции один и поместил недостающую часть для job-desc в оператор 4. Но все же я имею ту же ошибку. Он отображает сообщение об ошибке после откат. – Archangel08

+0

Можете ли вы пожалуйста, покажите, какой запрос идет не так? – Jens

+0

и добавьте '$ mysqli-> error()' после выполнения запроса, чтобы вы могли видеть причину. – Jens

0

Вы запросить job_desc таблицы неправильно.

$sql4 = "INSERT INTO job_desc (eid,position,status,hireDate,department,job_desc,basic,salary)        VALUES ('$id','$pose','$stat','$hstart','$dept','$pay','$salary')"; 

В Ценностях вы забыли указать значение job_desc.

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