为啥我的 UPDATE sql 查询不起作用?不会更新表

Posted

技术标签:

【中文标题】为啥我的 UPDATE sql 查询不起作用?不会更新表【英文标题】:Why isn't my UPDATE sql query working? Will not update table为什么我的 UPDATE sql 查询不起作用?不会更新表 【发布时间】:2017-10-25 14:34:20 【问题描述】:

我的功能有问题吗?我还创建了一个带有博客页面的简单任务管理器。这与我用来更新 task 表中的任务的函数相同,只是修改为更新 Blog 表。

function update_blog($blogpost) 
    global $db;

    $sql = "UPDATE Blog SET ";
    $sql .= "blog_date='" . db_escape($db, $blogpost['blog_date']) . "', ";
    $sql .= "blog_content='" . db_escape($db, 
    $blogpost['blog_content']) . "' ";
    $sql .= "WHERE id='" . db_escape($db, $blogpost['id']) . "' ";
    $sql .= "LIMIT 1";

    $result = mysqli_query($db, $sql);

    if($result) 
      return true;
     else 
      // UPDATE failed
      echo mysqli_error($db);
      db_disconnect($db);
      exit;
    

edit.php,用户在提交他们的博客文章编辑后被重定向到blog.php。但是,没有看到编辑,并且表本身也没有更新。我在这里遗漏了一些简单的东西吗?

【问题讨论】:

检查错误? $result 是真是假?正在执行的实际运行时 SQL 查询是什么?当您手动执行该查询时会发生什么? 在执行之前尝试回显sql并验证它 你输出了原始查询吗?看看你想要什么? 您对 SQL 注入持开放态度。由于您使用的是 mysqli,因此请利用 prepared statements 和 bind_param。 这将解决可能出现的任何令人讨厌的引用问题,即使使用转义字符串函数 【参考方案1】:

这可能与数据库中不存在db_escape($db, $blogpost['id']) 的记录有关(如果查询没有失败)。我建议执行一个简单的SELECT 来查看存在多少行,例如:

SELECT * 
FROM Blog
WHERE id = <value of db_escape($db, $blogpost['id'])>;

如果您没有得到任何行,这可能意味着没有记录存在,因此没有更新。在这种情况下,您可能需要传递不同的值,具体取决于表单中的内容。

【讨论】:

以上是关于为啥我的 UPDATE sql 查询不起作用?不会更新表的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 PL/SQL 过程不起作用?

为啥这个 T-SQL 查询在 Synapse 中不起作用?

为啥这个使用 INNER JOIN 的 SQL DELETE 查询不起作用? [复制]

SQL Update语句不起作用 - SQL Server

为啥这个 IF NOT EXISTS 语句不起作用?

SQL / MS Access - 为啥这个 CASE 不起作用?