我有两张桌子:
tblUser:
+------+-----------+
| id | Name |
+------+-----------+
tblItems(此表接受多个复选框值,具体取决于所选用户的数量):
+------+-----------+---------------+
| id | items | name_id |
+------+-----------+---------------+
name_id
会在tblUser
中获得id的值
我使用此代码将tblUser
的id值设为name_id
:
for ($i=0; $i<sizeof($checkbox);$i++){
$sql2="INSERT INTO tbl_trainings VALUES (NULL, '".$checkbox[$i]."', (SELECT id FROM tbl_info))";
$result2=mysql_query($sql2);
}
它可以在数据库中显示如下所示的第一个INSERT
数据中正常工作:
+------+-----------+---------------+
| id | items | name_id |
+------+-----------+---------------+
| 1 | Bucket | 1 |
+------+-----------+---------------+
| 2 | Tree | 1 |
+------+-----------+---------------+
| 3 | House | 1 |
+------+-----------+---------------+
但是在下一个或第二个INSERT
数据中将出错。错误是
子查询从mysql_error();
顺便说一句,这是完整的代码:
if($_POST["Submit"]=="Submit"){
$sql1="INSERT INTO tblUser VALUES (NULL, '$fname', '$lname')";
$result1=mysql_query($sql1);
for ($i=0; $i<sizeof($checkbox);$i++){
$sql2="INSERT INTO tblItems VALUES (NULL, '".$checkbox[$i]."', (SELECT id FROM tblUser))";
$result2=mysql_query($sql2);
}
}
if($result2 && result1){
echo"<center>";
echo"<h1>";
echo "SUCCESSFUL!";
echo"</h1>";
echo"</center>";
}
else {
echo "ERROR". mysql_error();
}
数据库中所需的输出为:
+------+-----------+---------------+
| id | items | name_id |
+------+-----------+---------------+
| 1 | Bucket | 1 |
+------+-----------+---------------+
| 2 | Tree | 1 |
+------+-----------+---------------+
| 3 | House | 1 |
+------+-----------+---------------+
| 4 | Tree | 2 |
+------+-----------+---------------+
| 5 | Air plane | 2 |
+------+-----------+---------------+
| 6 | Bucket | 3 |
+------+-----------+---------------+
任何帮助将不胜感激。 提前谢谢。
答案 0 :(得分:1)
SELECT id FROM tblUser
从表中返回所有ID。
您需要使用mysql last_insert_id代替:
$sql1="INSERT INTO tblUser VALUES (NULL, '$fname', '$lname')";
$result1=mysql_query($sql1);
$user_id = mysql_insert_id();
for ($i=0; $i<sizeof($checkbox);$i++){
$sql2="INSERT INTO tblItems VALUES (NULL, '".$checkbox[$i]."', $user_id)";
$result2=mysql_query($sql2);
}
请注意,不推荐使用标准的mysql函数。
答案 1 :(得分:0)
出于安全原因,您应该使用预准备语句 http://php.net/manual/en/pdo.prepared-statements.php