PHPが二重引用符で囲まれた変数を解析しない

私は次のクエリを持っています:

var_dump($id);//string '51' (length=2)


$sql    = "SELECT * FROM table WHERE id=$id";

$result = mysql_query($sql, $db);

$myrow  = mysql_fetch_array($result);

var_dump($myrow)//null (NOT OK)

ハードコードされた値(51)の$ idを変更すると、次のように動作します。

$sql    = "SELECT * FROM table WHERE id=51";

$result = mysql_query($sql, $db);

$myrow  = mysql_fetch_array($result);

var_dump($myrow);//array 0 => string '51' (length=2) (OK)

$ sqlが正確に解析されていないかのようです。非常に古いサイトです。サイトが最初に作成されたPHPバージョンとは関係がありますか?

$sql = "SELECT * FROM table WHERE id=".$id; 
// ALSO WORKS. But I am not really looking forward to doing a FIND & REPLACE

編集:

このサイトには、何百もの種類のクエリがあります。私の誰か他の誰かが開発した古いサイトです。私はINI設定があるか、PHPのバージョン間で切り替えられたものがあるかどうか疑問に思っていました。

ありがとう

PHPバージョン:PHP5.2

このサイトはバージョン4のためにビルドされました。

2
$ sql var_dump を実行するのはどうでしょうか?
追加された 著者 Svish,
おそらく、それはSQLエラーです。このようなクエリを実行しようとすると、$ idを一重引用符で囲むことなく動作するかどうかは分かりません。文字列なのでです。 "SELECT * FROM table WHERE id = '$ id'" ";
追加された 著者 deed02392,
どのバージョンがPHPですか?
追加された 著者 Simone,
返されるエラーはないようです。
追加された 著者 beingalex,
PHPバージョン:PHP5.2このサイトはバージョン4用にビルドされています。
追加された 著者 beingalex,
ありがとう、N.B.あなたは私にチェックさせた。 $ idは$ _REQUEST ['id']から来ています。それは何もなかった。 :)
追加された 著者 beingalex,
これは絶対に機能するはずです。問題は他の場所です
追加された 著者 Evert,
$ id はどこから来たのですか?あなたはそれがASCII 53/49を含んでいると確信していますか?最初に、 var_dump((int)$ id); があなたに与えるものを見てから、クエリ文字列を $ sqlに変更してみてください= "SELECT * FROMテーブルWHERE id ="。((int)$ id);
追加された 著者 DaveRandom,
エラーが返されているかどうかをどうやって確認していますか?また、最初に $ id をどうやって取得していますか?ユーザーの入力してから、変数を消去するか?
追加された 著者 N.B.,
エラー処理を試しましたか? mysql_error関数を使用すると、1つのオプションになります。
追加された 著者 mishu,

4 答え

このようなクエリを書くのではなく

$sql = "SELECT * FROM table WHERE id=$id";

あなたはこの代替も使うことができます..

$sql = "SELECT * FROM table WHERE id='".$id."'";
0
追加された

register_globalsはオフになっていました。私はセキュリティの意味を知っていますが、私はそれを独自の仮想サーバー上に持っており、今修正する時間がありません。

htaccessの場合:

php_flag register_globals on 
0
追加された
これが本当に問題であれば、あなたは疑問に思っていました。変数に51が含まれていることを実際に検証していたか、クエリを書いたときにその変数を作成しただけでしたか?
追加された 著者 Louis-Philippe Huberdeau,

事実とは別に、クエリをエスケープする必要があります(この場合、整数にキャストすれば十分です)。あるいは、好ましくはプリペアドステートメントを使用して作成することをお勧めします。

PHPは最初から二重引用符で囲まれた文字列を解析していますので、 $ sql の値を出力してMySQLに送られる内容を調べてみてください。

0
追加された

これを使用してください:

SELECT * FROM table WHERE `id` = $id 

IDの両側に

を挿入します。
0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com