2017-06-09 5 views
0

私はuserという名前のデータベースを持っています。ここに写真があります: enter image description here私にエラーを送信するSQL構文

ユーザー "dodlo.rg"のユーザー名をプログラムで変更したいと思います。

実際、私はPHPバージョン7.1を持っています。そして、これは私のPHPCodeの一部です:

EDITED CODE:

$newName= $_POST["changeT"]; 
$userId = $_POST["userId"]; 

     $db = mysqli_connect("trolö", "trolö", "trolö123", "trolö") 
     $sql = "UPDATE user SET username = '$newName' WHERE user_id = '$userId'"; 
     $query = mysqli_query($db, $sql); 
     $response["successU"] = true; 

しかし、私はエラーを取得する:「あなたはあなたのSQL構文でエラーを与え、あなたのMariaDBサーバに対応するマニュアルを確認してくださいバージョン1の「SELECT * FROM user」の近くで使用する正しい構文のバージョン

ありがとうございます。

+1

あなたはこの 'SELECT * FROM user'を必要としません – hungrykoala

+0

また、ユーザ名ではなく更新のための参照として 'user_id'を使用することを習慣にしてください。重複の場合は – hungrykoala

+0

@hungrykoalaすべてのユーザー名を1人でしか取れない場合でも、user_idでそれを行うべきですか? – user7938448

答えて

1

にこのクエリを変換する必要があります。 最初に、この列はvarcharフィールドなので、引用符で囲む必要があります。それ以外の場合は、SQLエラーが発生します。 2番目のSELECTステートメントは有効ではありませんが、私はそれがコピー/ペーストエラーであったと思います。

したがって、作業コードは次のようになります。それはときに、より複雑なクエリの速度を向上させるだろうと

$newName= $_POST["changeT"]; 

    $db = mysqli_connect("trolö", "trolö", "trolö123", "trolö") 
    $sql = "UPDATE user SET username = '".addslashes($newName)."' WHERE username = 'dodlo.rg'"; 
    $query = mysqli_query($db, $sql); 
    $response["successU"] = true; 

はまた、あなたのどこ文ではなく、varchar型のフィールドをプライマリキーを使用してご検討ください。 (例えば、 where user_id = 35 instead of where username = 'dodlo.rg')。

最後に、このコードは非常に重要ですが、SQLインジェクションの脆弱性があります。準備されたステートメントを使用する必要があります。

1

あなたは問題が2つの部分にある二つの部分

$sql1 = "UPDATE user SET username = $newName WHERE username = 'dodlo.rg'"; 
$sql2 = "SELECT * FROM user";