2015-06-06 217 views
0

所以我试图建立一种更新的电子邮件功能,而且应该把它放到数据库的部分看起来像这样mysqli的更新查询不起作用

<?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不太熟悉,以前主要使用过其他dbs

回答

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); 
+0

不行,仍然不起作用,'email'的错误到底是什么 – Svante

+0

你在字符串的末尾还有其他的''。 将'email' =“%s”'改为'email' =“%s” – sunshinejr

+0

是的,我做了,仍然没有工作 – Svante

1

接受的答案将工作,但事先准备好的声明将是更加安全

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

用事先准备好的声明中,你不必担心你的逃跑变量来防止SQL注入。