2012-02-06 34 views
2

我有以下查詢: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) 

當我改變$ ID爲一個硬編碼值(51),它的工作原理:

$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.something。

+1

你嘗試了一些錯誤處理?使用mysql_error函數將是一個選項.. – mishu 2012-02-06 11:40:10

+0

PHP是什麼版本? – Simone 2012-02-06 11:42:09

+0

似乎沒有任何返回的錯誤。 – beingalex 2012-02-06 11:43:59

回答

0

,而不是寫這樣的查詢

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

你可以使用這種替代也..

$sql = "SELECT * FROM table WHERE id='".$id."'"; 
0

使用此請:在兩側

SELECT * FROM table WHERE `id` = $id 

插入`編號爲

0

register_globals已關閉。我知道安全隱患,但我已經在自己的虛擬服務器上安裝了它,現在還沒有時間來修復它。

htaccess的:

php_flag register_globals on 
+0

如果這確實是問題,那麼您的問題就是誤導。如果您真的驗證了該變量包含51,或者您在編寫查詢時完成了該變量? – 2012-02-06 13:06:32

0

除了事實,即查詢應該被轉義(在這種情況下,強制轉換爲整數就足夠了),或者最好是通過預處理語句創建的,我的猜測是,這是查詢失敗了。

PHP自從開始就解析了雙引號字符串,所以請嘗試輸出值$sql以查看發送到MySQL的內容。