2016-09-02 6 views
-4

更新のWHERE句で変数を使用すると、更新が行われません。条件で変数を使用しているときにmysqlの更新が機能しない

  $eventid=$_GET['id'];   
      $sql = "UPDATE events SET name=:name WHERE id=:id"; 
      $q = $conn->prepare($sql); 
      $q->execute(array(':name'=>$name,':id'=>$eventid)); 

私が$ _GET ['id']をエコーすると、正しい値が得られます。 $ _GET ['id']は別のページから渡された値です

+0

あなたは[SQLインジェクション攻撃](http://bobby-tables.com)に脆弱です。あなたのサーバーを持ってお楽しみくださいpwn3d ... –

+0

リンクをクリックして、読んで始めてください。 –

+0

見たことがありません –

答えて

1

$ _GETパラメータを使用してIDを渡しているため、SQLインジェクション攻撃の脆弱性が人々にあります。 $ _POSTスーパーグローバルを直接使用してください。

より安全にするために、IDで$ _POSTを渡すことから始めて、SQLで$ _POSTを直接使用することはできません。

しかし、それはあなたが尋ねた質問ではありません。

IDを文字列として渡しているため、更新されていない可能性があります。おそらくそうではありません。

はあなたがMySQLをDBへ送信しているものをデバッグできるように、文字列変数にクエリを保存

WHERE id=".$_GET['id'].""); 
+0

updationはまだ動作していません –

+0

私は$ _GETを別の変数に渡してUPDATEで使用しました。質問のために私はSQLのインジェクションの問題を解決しましたか? –

+0

@ NazimMohamedそれはSQLインジェクションを解決しません。彼女はおそらくあなたが数字のような文字列を比較しようとしていると言っています。 –

1

WHERE id='".$_GET['id']."'");\ 

を変更してみてください。次に、dbに対して直接結果クエリを実行しようとします。

$DBcon->query(@strSQL); 
関連する問題