0

次のスクリプトを使用してレコード数を挿入したい。ただし、最初のものだけが挿入されます。その後、エラーを表示せずに停止します。これらのプリペアドステートメントの実行の何が問題になっていますか?

//$dbc = database connection  //shortan here 
// $mid[] = {1,2,3,4};  //sortened here.

$q5 = "INSERT INTO user_book_trn(user_id, member_id, book_id, date_read, lang_id) VALUES (?, ?, ?,  now(), ?)";

$s5 = mysqli_prepare($dbc, $q5);
//Bind the variables:
mysqli_stmt_bind_param($s5, 'iiii', $user_id, $member_id, $book_id, $lang_id);

foreach($mid as $mk => $mv) { //check for each selected check box value from member list:

    $q2 = "SELECT user_id, member_id, book_id FROM user_book_trn WHERE user_id = {$_SESSION['myuser']['userid']} and member_id = {$mv} and book_id= {$w}";

    $r3 = mysqli_query($dbc, $q2);

    if (mysqli_num_rows($r3) == 0) { //title is available for this user.

        //Assign the values to variables:
        $user_id = (int)$_SESSION['myuser']['userid'];
        $member_id = (int)$mv;
        $book_id = (int)$w;
        $lang_id = (int)$_SESSION['lid'];

        //just to check each iteration gets new values:
        echo "user_id : $user_id \n";
        echo "member_id : $member_id \n";
        echo "book_id : $book_id \n";

        //Execute the query:
        mysqli_stmt_execute($s5);
        if (mysqli_affected_rows($dbc) == 1) {
            //this runs ok just for the first iteration.. Why?

            echo "<p><b> The book $t is added. </b></p>";
            $_SESSION['bookid'] = $book_id;
        }
    }
}
4

1 に答える 1

0

正確な詳細はわかりませんが、私が知る限り、プリペアドステートメントは実行後に結果セットにバインドされます。最初にリセットする必要があります

mysqli_stmt_reset($s);

http://php.net/mysqli-stmt.reset

さらに、有用な変数名の使用を検討する必要があります。そして、あなたが言ったので、あなたはどんなエラーも見ることができないと言いました:

mysqli_stmt_error_list($s5);

http://php.net/mysqli-stmt.error-list

http://php.net/mysqli-stmt.errno

http://php.net/mysqli-stmt.error

于 2012-07-11T19:15:58.860 に答える