2017-03-15 37 views
1

次のコードを使用して、データベースの行をユーザIDパラメータを使用して編集しようとしています。PHPのSQLクエリで複数のパラメータ

しかし、私はこのエラーを取得するコードで:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET firstname = IF(? <> '', ?, firstname), SET surname = IF(? <' at line 3

私は本当にすべてがSQLクエリで順番になりますように問題だかわからないんだけど。 IF(?<> ''、?、)を取り出してみましたが、それでもエラーが出ます。私はテーブルのすべての列名が正しいことを二重チェックしました。私は間違って何をしていますか?

<?php 


     include 'database_conn.php'; 

     if(!$conn) 
     { 
      echo "Error connecting to database"; 
     } 

     if (mysqli_connect_errno()) 
     { 
      echo "<p>Connection failed:".mysqli_connect_error()."</p>\n"; 
     } 


     $id = isset($_GET['userId']) ? $_GET['userId'] : NULL; 

     $newUsername = isset($_REQUEST['updateUsername']) ? $_REQUEST['updateUsername'] : NULL; 
     $newEmail = isset($_REQUEST['updateEmail']) ? $_REQUEST['updateEmail'] : NULL; 
     $newPassword = isset($_REQUEST['updatePassword']) ? $_REQUEST['updatePassword'] : NULL; 
     $newForename = isset($_REQUEST['updateForename']) ? $_REQUEST['updateForename'] : NULL; 
     $newSurname = isset($_REQUEST['updateSurname']) ? $_REQUEST['updateSurname'] : NULL; 
     $newDob = isset($_REQUEST['updateDob']) ? $_REQUEST['updateDob'] : NULL; 


     $sql = "UPDATE Users 
       SET username = IF(? <> '', ?, username), 
       SET firstname = IF(? <> '', ?, firstname), 
       SET surname = IF(? <> '', ?, surname), 
       SET email = IF(? <> '', ?, email), 
       SET password = IF(? <> '', ?, password), 
       SET dateofbirth = IF(? <> '', ?, dateofbirth) 
       WHERE id = ?"; 


     $stmt = mysqli_prepare($conn, $sql) 
      or die(mysqli_error($conn)); 

     mysqli_stmt_bind_param($stmt, "ssssssi", $newUsername, $newForename, $newSurname, $newEmail, 
          $newPassword, $newDob, $id) 
      or die(mysqli_error($conn)); 

     mysqli_stmt_execute($stmt) 
      or die(mysqli_error($conn)); 




     if($stmt) 
     { 
      echo "Details updated successfully"; 
     } 
     else 
     { 
      die(mysqli_error($conn)); 
     } 

     mysqli_close($conn); 

     ?> 
+0

あなたはそのSQL構文で正確に何をしようとしていますか? 'IF(?<> ''、?、username)'はどこにでもあります。あなたは '$ _REQUEST ['updateUsername'])'と同じユーザー名を設定しようとしていますか? ** **この既存の回答**](http://stackoverflow.com/a/6514730/2341603)をチェックすることを強くお勧めします**。 –

+0

それはUPDATEの仕組みではありません。 RTM https://dev.mysql.com/doc/refman/5.7/en/update.html –

+0

さらに、これで生きていないことを望みます。プレーンテキストのパスワードを保存する際に。 –

答えて

1

MySQLの "UPDATE" とは、カンマで区切られただけ SETを使用しています。

あなたのクエリはのように読んでください:

$query = " 
    UPDATE `users` 
    SET 
    `username` = IF(? <> '', ?, `username`), 
    `firstname` = IF(? <> '', ?, `firstname`), 
    `surname` = IF(? <> '', ?, `surname`), 
    `email` = IF(? <> '', ?, `email`), 
    `password` = IF(? <> '', ?, `password`), 
    `dateofbirth` = IF(? <> '', ?, `dateofbirth`) 
    WHERE `id` = ? 
"; 

とお会いしますベースD自分以下のQ & Aで、そのための構文が変更されました:あなたは私のためin the comments areaを残しリンクあたりとして

あなたはコメントで、これはライブサイトではないと言いました。しかし、これでライブを開始する場合は、password_hash()password_verify()を使用してください。

参考文献:

プレーンテキストのパスワードを格納することは危険ですので。

注:パスワードの列の長さは60+以上にする必要があります。このマニュアルでは255が良い賭けだと示唆しています。

関連する問題