2016-05-29 2 views
0

Я искал в Интернете по возможным причинам, почему инструкция по обновлению MYSQL не будет работать, но ни одно из решений не будет работать в моем случае. Что может быть неправильным в этих строках кода?Оператор обновления PHP MySQL не работает

 public function forgotPassword($email, $newpassword, $salt){ 
    $result = mysqli_query($this->db->con,"UPDATE users SET user_password = '$newpassword',salt = '$salt' 
         WHERE email = '$email'"); 

Я попытался,

"UPDATE 'users' SET 'user_password' = '$newpassword','salt' = '$salt' 
         WHERE 'email' = '$email'" 

Я также пробовал,

"UPDATE 'DBNAME'.'users' SET 'user_password' = '$newpassword','salt' = '$salt' 
         WHERE 'users'.'email' = '$email'" 

forgotPassword функция работает правильно, только оператор UPDATE не выполняется.

Вот полная функция

public function forgotPassword($email, $newpassword, $salt){ 
$result = mysqli_query($this->db->con,"UPDATE `melobook_customers`.`users` SET `user_password` ='$newpassword',`salt` ='$salt' 
         WHERE `users`.`email` ='$email'"); 

    if ($result) { 
     return true; 
     } 
    else 
    { 
    return false; 
    } 

    } 
+0

Вы получили сообщение об ошибке? – IzzEps

+1

Вы сбиваете с толку backticks с перевернутыми запятыми – Strawberry

+0

@Strawberry хорошая точка, но его исходный запрос все равно должен работать, поскольку он не содержит зарезервированных ключевых слов mysql. – IzzEps

ответ

1

Я думаю, что проблема в запросе, вы использовали имя таблицы в одинарные кавычки, которые не должны быть использованы, здесь вы можете увидеть: «пользователи». Вместо одиночных кавычек вы должны использовать `users` или можете оставить это так пользователей. Таким образом, ваш запрос будет выглядеть примерно так,

"UPDATE` users` SET `user_password` = '$ Новый_пароль',` salt` = '$ соль' WHERE `email` = '$ электронной почты"

// Я также пробовал, Ваш второй запрос будет выглядеть примерно так

«UPDATE` DBNAME`.`users` SET `users`.`user_password` = '$ новый_пароль', `users`.`alt` = '$ salt' WHERE` users`.`email` = '$ email' "

Обновленный код, основанный на ваше требовании

<?php 
     class check_update{ 

      private $con; 

      public function __construct(){ 
       $this->con = mysqli_connect("db_host", "db_user", "db_password", "db_name"); 
      } 

      public function forgotPassword($email, $newpassword, $salt){ 
       $sql = "UPDATE `db_name`.`table_name` SET `table_name`.`password` ='$newpassword',`table_name`.`salt` = '$salt' WHERE `table_name`.`email` ='$email'"; 
       $result = mysqli_query($this->con, $sql); 
       if ($result) { 
        return true; 
       }else{ 
        return false; 
       } 
      } 
     } 
     $check_update = new check_update(); 
     $check_update->forgotPassword("your_email", "new_password", "salt"); 
?> 

Надеется, что это будет исправить вашу проблему.

+0

На самом деле я забыл упомянуть, что вы не можете использовать одинарные кавычки в любом месте вашего запроса для table_name, database_name, column_names и т. Д. Вы можете использовать одинарные кавычки только для строк. Как ниже приведен пример запроса. UPDATE 'stackoverflow_question'''test' SET' password' = '$ newpassword', 'salt' = '$ salt' WHERE' email' = '$ email' – Raj

+0

Я пробовал ваше решение, оно не работает. Может ли проблема быть в остальной части функции?Проверьте мое редактирование –

+0

. Каково значение свойства $ this-> db-> con, вы видели, что с помощью var_dump ($ this-> db-> con); проверьте, что он содержит? – Raj