【问题标题】:Mysqli update query doesn't workMysqli更新查询不起作用
【发布时间】:2015-06-06 12:01:18
【问题描述】:

所以我正在尝试构建一种更新电子邮件功能,应该将其放入数据库的部分看起来像这样

<?php $emailfrom = $_POST['emailfrom'];
        $emailto = $_POST['emailto'];
        $query = sprintf('UPDATE `users` SET `email`="%s" WHERE `email`="%s"`',
        mysqli_real_escape_string($db, $emailfrom),
    mysqli_real_escape_string($db, $emailto));
        mysqli_query($db, $query);    

问题是该行没有更新...我需要帮助知道为什么,因为我对 mysql 不太熟悉,所以之前主要使用其他数据库

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    您的查询中有语法错误。

                                                                         \/
    $query = sprintf('UPDATE `users` SET `email`= "%s" WHERE `email`= "%s"`',
    mysqli_real_escape_string($db, $emailfrom),
    mysqli_real_escape_string($db, $emailto));
    mysqli_query($db, $query); 
    

    另外,您可能希望将电子邮件从 emailFrom 更改为 emailTo,现在您正在以相反的方式进行操作。修改后:

    $query = sprintf('UPDATE `users` SET `email`= "%s" WHERE `email`= "%s"`',
    mysqli_real_escape_string($db, $emailto),
    mysqli_real_escape_string($db, $emailfrom));
    mysqli_query($db, $query); 
    

    【讨论】:

    • 不,仍然不起作用,email 的错误究竟是什么
    • 字符串末尾有额外的`。将 email= "%s"` 更改为 email= "%s"
    • 现在你的语法是正确的。我编辑了我的答案,如果我是正确的,你正在以相反的方式更新你的行。否则我不知道为什么你的查询不起作用,因为语法没问题,你发布的代码也是。尝试使用 error_reporting 进行调试。
    • 成功了!万分感谢,我现在感觉很愚蠢,当你说它时,它是如此明显......
    • 哈哈,别担心,疲倦的人常犯的错误 :) 很高兴你明白了。
    【解决方案2】:

    接受的答案会起作用,但准备好的陈述会更安全

    $query="UPDATE `users` SET `email`= ? WHERE `email`= ?";
    $stmt = $db->prepare($query);
    $stmt->bind_param('ss',$_POST['emailfrom'],$_POST['emailto']);
    $stmt->execute();
    $stmt->close();
    

    使用准备好的语句,您不必担心转义变量以防止 SQL 注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2012-10-26
      • 2018-09-04
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多