delete_flag列未更新

时间:2016-04-18 10:00:48

标签: php jquery mysql ajax mysqli

我一直在努力让它发挥作用,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中使用相同的查询时,它可以工作但不在脚本中。任何能真正帮助我解决问题的人都会详细说明。感谢。

2 个答案:

答案 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