Многопоточная вставка 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); ?> в 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 проверил пересмотренный код выше, чтобы увидеть изменения и увидеть текущую проблему, которую имеют коды.

Порядок, в котором выполняются запросы, не очень хорош. Вы должны выполнить запрос перед использованием функции 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); 

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

  $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); 

фамилия в два раза больше!

Урок 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 отсутствует

Ошибка запроса в таблице 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.