2016-10-11 7 views
0

私の更新クエリが変数$ idで動作しませんが、例えばリテラル番号29を使用すると動作します。私は$ idをvar_dumpedしてINT(29)を取得します。私は過去に働いたコードをコピーしたので、最近何か変わったのですか?作品

$id = (ISSET($_GET['id'])) ? intval($_GET['id']):0;//prevents sql inject 
var_dump($id); 

私のクエリは以下の通りです:

$sqlUpdate = $db->query("UPDATE sites SET site_name='$site_name',population='$population' WHERE id=29"); 

このクエリは動作しません:

$sqlUpdate = $db->query("UPDATE sites SET site_name='$site_name',population='$population' WHERE id=$id"); 
+0

文字列でSQLインジェクションを防止する方法はありますか?変数を使用してクエリを出力し、それが期待どおりであることを確認します。 – chris85

+0

他の変数のSQLインジェクションを防ぐためにmysqli_real_escape_stringを使用しています。あなたが出力によって何を意味するかはわかりませんが、私はすべての変数のvar_dumpを行っており、クエリはTRUEを返します。 intval($ id)はidフィールドに格納されているものと同じではないようです。 – Leslie

+0

UPDATEサイトを保存していますSET site_name = '$ site_name'、population = '$ population' WHERE id = $ id "in変数は実行前にそれを出力します。パラメータ化されたクエリを使用する方が良い方法でしょう。 – chris85

答えて

0

私は私の問題/解答を見つけました。フォームの投稿を処理するコードが同じファイル内に存在するため、フォーム内に<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">を使用しました。 'UPDATE'を押すと、アドレスバーにファイル名が正しいことがわかりましたが、すぐにGET変数が削除されました。このとき、次のコードは...

$id = (ISSET($_GET['id'])) ? intval($_GET['id']):0; 
$id = protect($db,$id); 

再び走ったと私の変数$ IDは、このように正しいレコードを更新するから私のコードを防ぐ、0に正しいGET値から変更されました。コードを次のように変更しました:

<form method="post" action=""> 

すべてが完全に更新されました。なぜ誰がこのことが起こったのか気にするなら、私はそれを高く評価します。

関連する問題