Php Mysqli更新查询不';行不通

Php Mysqli更新查询不';行不通,php,mysql,mysqli,Php,Mysql,Mysqli,因此,我试图构建一种更新电子邮件功能,应该将其放入数据库的部分如下所示 <?php $emailfrom = $_POST['emailfrom']; $emailto = $_POST['emailto']; $query = sprintf('UPDATE `users` SET `email`="%s" WHERE `email`="%s"`', mysqli_real_escape_string($db, $emailfrom),

因此,我试图构建一种更新电子邮件功能,应该将其放入数据库的部分如下所示

<?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);    

查询中出现语法错误

                                                                     \/
$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); 

被接受的答案会起作用,但事先准备好的声明会安全得多

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

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

不,仍然不起作用,而且
电子邮件的错误到底是什么
字符串末尾还有额外的`。将
email
=“%s”`更改为
email
=“%s”,现在语法正确了。我编辑了我的答案,如果我是正确的,您正在以相反的方式更新您的行。否则我就不知道为什么你的查询不起作用了,因为语法还可以,你发布的代码也可以。尝试使用错误报告进行调试。这就成功了!万分感谢,我现在觉得自己很傻,当你这么说的时候,这是很明显的…哈哈,别担心,疲劳的人常犯的错误:)很高兴你得到了它。