1

私のコードは

$user_query = '
     UPDATE  
          users  
     SET  
          `password`="$password",  
          `email`="$email", 
          `position`="$position", 
     WHERE  
          `username`=".$uname."';
$user_result = mysql_query($user_query, $connection);
confirm_query($user_result);

このクエリを実行すると、次のエラーが表示されます。

データベース クエリが失敗しました: SQL 構文にエラーがあります。7 行目の 'WHERE =".$uname."'
付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。username

このエラーの解決を手伝ってくれる機関はありますか?

4

6 に答える 6

6

クエリは一重引用符で囲まれているため、変数は解析されません。エラーでわかるように、文字列は文字通り

`username`=".$uname."

変数を正しく解析するには、enitre を二重引用符で囲む必要があります。

$user_query = "
 UPDATE  
      users  
 SET  
      `password`='$password',  
      `email`='$email', 
      `position`='$position'
 WHERE  
      `username`='$uname'";

または、文字列連結演算子を正しく使用してください.

$user_query = '
 UPDATE  
      users  
 SET  
      `password`="'.$password.'",  
      `email`="'.$email.'", 
      `position`="'.$position.'"
 WHERE  
      `username`="'.$uname.'"';

他の人が指摘したように、余分な,afterもありpostion="$position"ます。

于 2012-05-01T15:13:56.533 に答える
2

句の,前のコンマを削除しますWHERE

于 2012-05-01T15:11:06.217 に答える
1

position="$position",where句の間に末尾のコンマがあります。where句の直前のコンマを削除します。

于 2012-05-01T15:11:02.683 に答える
1

引用符を変更するだけで、次のようなDBドライバー機能を使用してデータをより適切にエスケープできます。mysql_real_escape_string()

引用符の違い:https ://stackoverflow.com/a/3446286/765634

エスケープ: http: //php.net/mysql_real_escape_string

完全なクエリ:

$user_query = <<<SQL
     UPDATE  
          users  
     SET  
          `password`="{$password}",  
          `email`="{$email}", 
          `position`="{$position}", 
     WHERE  
          `username`="{$uname}"
SQL;
于 2012-05-01T15:11:39.400 に答える
0
 UPDATE  
          users  
     SET  
          `password`="$password",  
          `email`="$email", 
          `position`="$position"
     WHERE  
          `username`=".$uname."';

,あなたはポジションの後にトレーリングを持っていました

于 2012-05-01T15:11:41.283 に答える
0

position="$position"の後に余分なコンマがあります。それを削除します。

于 2012-05-01T15:12:49.257 に答える