无法在while循环php mysqli中执行update语句
我有以下疑问无法在while循环php mysqli中执行update语句,php,mysql,mysqli,Php,Mysql,Mysqli,我有以下疑问 $products = $this->mysqliengine->query("select * from temp_all_product where download_status = 0") or die($this->mysqliengine->error()); $temp_status_update = $this->mysqliengine->prepare("update temp_all_product set down
$products = $this->mysqliengine->query("select * from temp_all_product where download_status = 0") or die($this->mysqliengine->error());
$temp_status_update = $this->mysqliengine->prepare("update temp_all_product set download_status = ? where id = ?") or die($this->mysqliengine->error);
$temp_status_update->bind_result($download_status, $id);
while($product = $products->fetch_assoc()) {
$id = $product['id'];
$download_status = 1;
$temp_status_update->execute();
}
在上面的语句中,我可以从
temp table
中选择值,但无法更新状态。这里的问题是什么您需要在update语句中使用bind_参数,而不是bind_结果
$temp_status_update->bind_param('dd', $download_status, $id);
“dd”只是告诉系统每个输入都是一个数字
@eggyal只是建议您可以用一条update语句替换所有代码。你关于限额的评论没有多大意义
建议:如果你对mysqli没有太多投资,那么就改用PDO。它允许使用命名参数,使您的代码更健壮,更易于维护:
$sql = "UPDATE temp_all_product SET download_status = :status where id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(array('status' => 1, 'id' => $product['id']));
另外,您可以将其配置为引发异常,这样就不需要进行所有这些错误检查
为什么不简单地
更新temp\u all\u产品集download\u status=1,其中download\u status=0
?如果我在sql查询中使用limit,就会出现问题。对吧?如果你做了什么会怎么样?你做不到。你能解释一下吗有趣的是,这正是我要问你的!