php查询出错

时间:2013-10-16 20:07:33

标签: php sql

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

3 个答案:

答案 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>''";

..无法执行。