子查询在第二个插入上返回多于一行

时间:2012-12-29 14:43:17

标签: php html insert phpmyadmin

我有两张桌子:

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

返回超过1行

顺便说一句,这是完整的代码:

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          |
+------+-----------+---------------+

任何帮助将不胜感激。 提前谢谢。

2 个答案:

答案 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