【发布时间】:2017-12-02 06:04:08
【问题描述】:
这些代码行似乎可以正常工作:
if(isset($_POST['result'])) {
if($_POST['result'] == 'true'){
$delete_post_query = mysqli_query($con, "UPDATE posts SET deleted='yes' WHERE id='$post_id'");
if($stmt = mysqli_prepare($con,$delete_post_query)){
}
}
}
但是下面准备好的等价物似乎没有执行:
if(isset($_POST['result'])) {
if($_POST['result'] == 'true'){
$delete_post_query = mysqli_query($con, "UPDATE posts SET deleted='yes' WHERE id=?");
if($stmt = mysqli_prepare($con,$delete_post_query)){
mysqli_stmt_bind_param($stmt, "s",$post_id);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
}
}
我对此感到很困惑,并且相当肯定我遗漏了一些明显的东西。有什么建议/解决方案吗?
更新/编辑:
我在复制/粘贴代码时犯了一个愚蠢的错误,所以我按照建议进行了更新。
还分别尝试了整数和双精度的绑定参数。
我认为这个问题与绑定参数有关,因为当我用硬编码变量 $post_id 替换占位符(即“?”)时,它工作得很好。
【问题讨论】:
-
见this post 一些很好的例子。
-
我很抱歉,我不小心从我的代码中复制粘贴了一些愚蠢的东西。我已经更新了准备好的语句查询,其中充满了愚蠢的东西。我相信现在是正确的。同样的问题:)
标签: php mysqli prepared-statement mariadb sql-injection