2015-06-06 156 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注入。