2012-02-24 63 views
0

我有一個mySQL數據庫,通過PHP獲取一些數據。「mysql_fetch_assoc()」mysql數據字段發生變化時出錯

這是我有:

if ($db_found) { 

    $URL_ID = $_GET["a"]; 

    $SQL = "SELECT * FROM tb_employees WHERE URL_ID = $URL_ID"; 
    $result = mysql_query($SQL); 

    while ($db_field = mysql_fetch_assoc($result)) { 
     $firstname = $db_field['firstname']; 
     $surname = $db_field['surname']; 
     $function = $db_field['function']; 
     $email = $db_field['email']; 
     $telnr = $db_field['telnr']; 
    } 

    mysql_close($db_handle); 
} 
else { 
    print "Database not found... please try again later."; 
    mysql_close($db_handle); 
} 

在我的MySQL數據庫URL_ID場,在這個例子中,001當我去www.mydomain.com/index.php?a= 001它獲取所有數據,將其放入一個變量中,並且我可以在沒有任何問題的情況下回顯這些變量。

現在,我想更改URL_ID,並將其更改爲mySQL數據庫中的「62ac1175」。然而,當我着手www.mydomain.com/index.php?a=62ac1175,我得到這個錯誤信息:

警告:mysql_fetch_assoc()預計參數1是資源, 布爾在 給出MYDOMAIN .com \ db_connect.php on line 17

mySQL中的字段具有varchar(8)作爲類型,utf8_general_ci作爲歸類。

如果我將條目更改回001並將我的URL更改爲?a = 001,它可以再次正常工作。

怎麼回事?

+0

可能的重複[Warning:mysql_fetch_ *期望參數1是資源,布爾給定錯誤](http://stackoverflow.com/questions/11674312/warning-mysql-fetch-expects-parameter-1-to-是資源布爾錯誤) – j0k 2012-07-31 07:49:36

+0

可能重複的[mysql_fetch_array()期望參數1是資源,布爾給出在選擇](http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects -parameter-1-to-resource-boolean-given-in-select) – t0mm13b 2012-08-07 16:18:31

回答

1

您在查詢中沒有執行任何錯誤檢查,因此如果查詢失敗就無妨。如何添加適當的錯誤檢查在manual on mysql_query()或本reference question.

例概述:

$result = mysql_query($SQL); 

if (!$result) 
{ trigger_error("mySQL error: ".mysql_error()); 
    die(); } 

您的查詢斷裂了,因爲你沒有包裝在引號輸入。您可以避免*僅用於整數(其中62ac1175不是)。嘗試

$SQL = "SELECT * FROM tb_employees WHERE URL_ID = '$URL_ID'"; 

此外,您顯示的代碼容易受到SQL injection的影響。使用適當的衛生方法(例如,mysql_real_escape_string()用於您正在使用的經典mysql庫),或者切換到PDO並準備好語句。

在你的代碼,這會看起來像這樣:與其

$URL_ID = $_GET["a"]; 

$URL_ID = mysql_real_escape_string($_GET["a"]); 

*但是,如果你避開報價,mysql_real_escape_string()將無法​​正常工作,你需要檢查手動確定參數實際上是否是整數。

+0

非常感謝你的回答和解釋。事實上,答案很簡單。 – WebGremlin 2012-02-24 13:16:45

相關問題