2015-06-06 2 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 "' to '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 ,

Смежные вопросы