-3

我正在尝试访问数据库中的两个表,一个是代理,另一个是属性。当我单击上一页上的链接时,它会将我带到地址栏中的 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);
4

3 回答 3

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
于 2013-10-16T20:12:37.027 回答
1

您的查询可能出现错误,因此 result( $agentResult) 是false. 因此,错误消息是“给定的布尔值”。

试着mysql_numrows用一个if声明来拥抱你:

$agentResult=mysql_query($agentQuery);

if ($agentResult)
{
    $agentNum=mysql_numrows($agentResult);
}
else
{
    echo mysql_error(); // To show the query error
}
于 2013-10-16T20:11:49.307 回答
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>''";

..无法执行。

于 2013-10-16T20:14:12.000 回答