我正在尝试访问数据库中的两个表,一个代理和其他属性。当我点击上一页上的链接时,它会带我到地址栏中的ID。我无法理解为什么我不断收到此错误消息:警告:mysql_numrows()期望参数1为资源,第16行的C:\ wamp \ www \ practice \ details.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);
答案 0 :(得分:8)
让我们将您的查询代码压缩为单个语句:
$agentResult=mysql_query(
"SELECT * FROM agents WHERE agentId='SELECT agentId FROM properties WHERE id='$id''"
);
这不是有效的查询。
将此添加到以下事实:您实际上并未检查mysql_query()
的返回值以查看其是否成功,并且您已经提供了错误。
Yadda yadda SQL注入 yadda yadda mysql_*
函数已弃用 yadda yadda 学习使用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 :(得分:1)
您的查询可能收到错误,因此结果($agentResult
)为false
。因此,错误消息是“ boolean given”。
尝试使用mysql_numrows
语句包含if
:
$agentResult=mysql_query($agentQuery);
if ($agentResult)
{
$agentNum=mysql_numrows($agentResult);
}
else
{
echo mysql_error(); // To show the query error
}
答案 2 :(得分: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>''";
..无法执行。