2013-10-16 50 views
-3

我想訪問數據庫中的兩個表,一個代理和其他屬性。當我點擊前一頁上的鏈接時,它會將我帶到地址欄中的id。我不明白爲什麼我不斷收到此錯誤信息:警告:mysql_numrows()預計參數1是資源,布爾在C中給出:\ WAMP \ WWW \上線實踐\ details.php 16錯誤與PHP查詢

$id = $_GET['id']; 

    $agent ="SELECT agentId FROM properties WHERE id='$id'"; 
    $agentQuery ="SELECT * FROM agents WHERE agentId='$agent'"; 
    $agentResult=mysql_query($agentQuery); 
    $agentNum=mysql_numrows($agentResult); 

我已經有此代碼的工作:

$query ="SELECT * FROM properties WHERE id = '$id'"; 
$result=mysql_query($query); 
$num=mysql_numrows($result); 
+3

*絕不*假設mysql_query成功。您應該*總是*檢查以確保查詢工作。 'if($ agentResult === FALSE){die(mysql_error()); }' –

+1

你能*請*寫一個更好,更具描述性的標題?這與phpmyadmin有什麼關係? –

+0

'$ agent'有什麼價值? – desbest

回答

8

讓我們凝聚你的查詢代碼到一個單一的語句:

$agentResult=mysql_query(
    "SELECT * FROM agents WHERE agentId='SELECT agentId FROM properties WHERE id='$id''" 
); 

這不是有效的查詢。

此外,您並未實際檢查mysql_query()的返回值以查看它是否成功,並且您提供了錯誤。

內容非常重要 SQL注入內容非常重要mysql_*功能棄用內容非常重要學會使用PDO或mysqli的。

忽略所有那些我剛纔說的事情,你的代碼應該更像:

$id = $_GET['id']; 

$agent_q = "SELECT agentId FROM properties WHERE id='$id' LIMIT 1"; 
if(! $rs = mysql_query($agent_q)) { 
    die(mysql_error()); 
} else if(mysql_numrows($rs) == 0) { 
    echo('no agent by that ID'); 
} else { 
    $row = mysql_fetch_assoc($rs); 
    $agent = $row['agentId']; 
    $agentQuery ="SELECT * FROM agents WHERE agentId='$agent'"; 
    if(! $agentResult = mysql_query($agentQuery)) { 
    die(mysql_error()); 
    } 
    $agentNum = mysql_numrows($agentResult); 
} 

或用簡化查詢:

SELECT a.* 
FROM agents a INNER JOIN properties p 
    ON a.agentID = p.agentId 
WHERE p.id = $id 
1

您的查詢可能是得到一個錯誤,所以結果($agentResult)是false。因爲這個錯誤信息是說「boolean given」。

嘗試用if語句來擁抱你mysql_numrows

$agentResult=mysql_query($agentQuery); 

if ($agentResult) 
{ 
    $agentNum=mysql_numrows($agentResult); 
} 
else 
{ 
    echo mysql_error(); // To show the query error 
} 
0

假設$id=<someid>,這

$agent ="SELECT agentId FROM properties WHERE id='$id'"; 
$agentQuery ="SELECT * FROM agents WHERE agentId='$agent'"; 

解決此問題:

$agentQuery ="SELECT * FROM agents WHERE agentId='SELECT agentId FROM properties WHERE id='<someid>''"; 

..無法執行。