Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for循环中准备好的insert语句仅适用于第一次迭代..(PHP)_Php - Fatal编程技术网

for循环中准备好的insert语句仅适用于第一次迭代..(PHP)

for循环中准备好的insert语句仅适用于第一次迭代..(PHP),php,Php,我想使用以下脚本插入记录数。但是,只有第一个被插入。之后,它就停止了,没有显示任何错误。这些准备好的语句执行有什么问题 //$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 (?, ?, ?, no

我想使用以下脚本插入记录数。但是,只有第一个被插入。之后,它就停止了,没有显示任何错误。这些准备好的语句执行有什么问题

//$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;
        }
    }
}
/$dbc=数据库连接//shortan here
//$mid[]={1,2,3,4}//在这里分类。
$q5=“将值(?,,现在(),)插入到用户书籍trn(用户id、成员id、书籍id、阅读日期、语言id)中”;
$s5=mysqli_prepare($dbc,$q5);
//绑定变量:
mysqli_stmt_bind_param($s5,$iiii',$user_id,$member_id,$book_id,$lang_id);
foreach($mid as$mk=>$mv){//检查成员列表中每个选中的复选框值:
$q2=“从user_book_trn中选择user_id、member_id、book_id,其中user_id={$\u SESSION['myuser']['userid']}和member_id={$mv}和book_id={$w}”;
$r3=mysqli_查询($dbc,$q2);
如果(mysqli_num_rows($r3)==0){//title可用于此用户。
//将值分配给变量:
$user_id=(int)$\会话['myuser']['userid'];
$member_id=(int)$mv;
$book_id=(int)$w;
$lang_id=(int)$_会话['lid'];
//只需检查每次迭代即可获得新值:
echo“user\u id:$user\u id\n”;
echo“member\u id:$member\u id\n”;
回显“book\u id:$book\u id\n”;
//执行查询:
mysqli_stmt_execute(5美元);
if(mysqli_受影响的_行($dbc)==1){
//这在第一次迭代中运行正常。为什么?
echo“增加了$t这本书。

”; $\u会话['bookid]=$book\u id; } } }
不知道确切的细节,但据我所知,准备好的语句在执行后绑定到结果集。你需要先重置它

mysqli_stmt_reset($s);

<>另外,你应该考虑使用有用的变量名。因为您提到,您看不到任何错误:

mysqli_stmt_error_list($s5);


在何处以及为什么要进行此var_转储($mid)?我正在为每个迭代打印成员id,只是为了确保它得到新的值。它是否第二次运行
echo“user\u id:$user\u id
?或者它在此之前就死了?您有3个起始大括号
{
,但只有一个结尾
}
,我希望这是因为其他2个在您复制的部分之外,如果不添加2个
}
,并查看它运行echo“user\u id:$user\u id”和其他echo命令第二次、第三次是否有任何差异。只是语句没有执行。我在$\u会话['bookid']之后添加了mysqli\u stmt\u reset($s5)=$bookid;但是,没有成功..可能
mysqli\u infected\u rows()
0
,或者
-1
(错误,请参阅手册)?您尝试过上述其他功能/方法吗?