我一直在努力让它发挥作用,Heres wat我正努力做到。
我有一个带有col名称的贷款数据库 - delete_flag(int(11)),其中0 - 未删除,1被删除。 恩。
+----+-------------+-------------+
| id | loan | delete_flag |
+----+-------------+-------------+
| 1 | John | 0 | this one is visible
+----+-------------+-------------+
| 2 | Meresa | 1 | this one is not visible to user
+----+-------------+-------------+
因此,所有不再存在的贷款都设置为1。 我的表行ID是通过ajax发送的,它们在“网络”选项卡中的结果显示正确的行ID ids:" 11"
我的PHP代码删除或我会说更新delete_flag col值为1如下所示:
<?php
session_start();
$con = new mysqli($server,$username,$password,$database);
if(isset($_POST['ids'])){
$ids = $_POST['ids'];
$id_count = count($_POST['ids']); // count array
for($i=0; $i < $id_count; $i++)
{
$id = $ids[$i];
//mysqli_query($con,"DELETE1 FROM k_loans WHERE loan_id=".$id);// this works perfectly ,permanently deleting the record in database .
$result= mysqli_query($con,"UPDATE k_loans set delete_flag = 1 WHERE loan_id='.$id'");
var_dump($result);
echo "successful delete";
}
}
?>
现在如果使用以下代码 -
`mysqli_query($con,"DELETE1 FROM k_loans WHERE loan_id=".$id);`
从通过ajax调用发送的已接收ID中删除记录。
但是因为我想将记录保存在数据库中,但是对用户隐藏,我使用的是这段代码:
$result= mysqli_query($con,"UPDATE k_loans set delete_flag = 1 WHERE loan_id='.$id'");
“网络”标签中的以下结果显示如下:
bool(true)已成功删除。
但奇怪的是没有记录更新。当我在phpmyadmin中使用相同的查询时,它可以工作但不在脚本中。任何能真正帮助我解决问题的人都会详细说明。感谢。
答案 0 :(得分:1)
你真的应该使用带有绑定变量的预准备语句。原始语句的问题在于$id
值附近的引号。如果您使用了绑定变量,那么您就不必担心引号丢失或格式错误,或者无法转义值以防止SQL注入,因为预处理语句会为您处理此问题。
$query = "UPDATE k_loans set delete_flag = 1 WHERE loan_id=?";
$stmt = mysqli_prepare($con, $query);
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
修改强>
另请注意,如果您使用不同的id值多次使用相同的查询,则只需准备一次语句;你只需要在循环中重复绑定/执行
$query = "UPDATE k_loans set delete_flag = 1 WHERE loan_id=?";
$stmt = mysqli_prepare($con, $query);
for($i=0; $i < $id_count; $i++) {
$id = $ids[$i];
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
}
答案 1 :(得分:0)
您的更新语句语法中有错误。
尝试:
$result= mysqli_query($con,"UPDATE k_loans set delete_flag = 1 WHERE loan_id=$id");
更好的解决方案是使用预准备语句来避免sql注入。检查:http://php.net/manual/fr/mysqli.prepare.php