2013-10-16 27 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>''"; 

..无法执行。