0

私は2つのテーブルを持っています:

ユーザー:

+------+-----------+
|  id  |   Name    |
+------+-----------+

tblItems (このテーブルは、ユーザーが選択した数に応じて複数のチェックボックス値を受け入れます):

+------+-----------+---------------+
|  id  |  items    |    name_id    |
+------+-----------+---------------+

name_idの id の値を取得しますtblUser
このコードを使用して to の id の値を取得しtblUserます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          |
+------+-----------+---------------+

しかし、次または 2 番目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          |
+------+-----------+---------------+

どんな助けでも大歓迎です。前もって感謝します。

4

2 に答える 2

1
SELECT id FROM tblUser

テーブルからすべてのIDを返します。

代わりにmysqllast_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関数は非推奨になっていることに注意してください。

于 2012-12-29T14:49:58.923 に答える
0

安全上の理由により、準備済みステートメントを使用する必要があります http://php.net/manual/en/pdo.prepared-statements.php

于 2012-12-29T14:55:51.223 に答える