2016-05-29 18 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'" 

私もforgotPassword機能が正常に動作する、

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

を試してみましたが、唯一の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

あなたはバックスラッシュを逆コンマで混同しています – Strawberry

+0

@Strawberryの良い点ですが、元のクエリはmysqlの予約済みキーワードが含まれていないので動作します。 – IzzEps

答えて

1

で、あなたがここにあなたが見ることができ、使用すべきではない単一引用符でテーブル名を使用:「ユーザー」。一重引用符の代わりに`users`を使用するか、のユーザーのようにすることができます。だからあなたのクエリは次のようになります、

を "UPDATEは` `salt`は= '$塩' ` email` = '$電子メール'、 `user_password` = '$の新パスワードを' SET users`"私も試してみました

//、 あなたの2番目のクエリは、この

「UPDATE `DBNAME`.`users` SET` users`.`user_password` = '$の新パスワード' のようになります、 `users`.`salt` = '$ salt' ` 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

関連する問題