【问题标题】:Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in on line 44 [duplicate]警告:mysql_num_rows() 期望参数 1 是资源,第 44 行中给出的布尔值 [重复]
【发布时间】:2013-04-28 20:21:50
【问题描述】:

我认为正确的搜索引擎的 HTML 代码 搜索

我的搜索引擎

PHP 代码从这里开始,我相信错误来自这里

if(!$button)
echo "you didn't submit a keyword"; else
{
if(strlen($search)<=1)
echo "Search term too short";
else{
echo "You searched for <b>$search</b> <hr size='1'></br>";
mysql_connect("localhost","root","");
mysql_select_db("testproject");

$search_exploded = explode (" ", $search);
foreach($search_exploded as $search_each)
{
$x = NULL; $construct = NULL;
$x++;
if($x==1)
$construct .="keywords LIKE '%$search_each%'";
else
$construct .="AND keywords LIKE '%$search_each%'";
}
$construct ="SELECT * FROM members WHERE $construct";
$run = mysql_query($construct);

$foundnum = mysql_num_rows($run);
if ($foundnum==0)
echo "Sorry, there are no matching result for <b>$search</b>.
</br></br>1. Try more general words.";
else
{
echo "$foundnum results found !<p>";

while($runrows = mysql_fetch_assoc($run))
{
$username = $runrows ['username'];
$email = $runrows ['email'];

} 
}
}
}
?>

继续获取:警告:mysql_num_rows() 期望参数 1 是资源,在中给出的布尔值

【问题讨论】:

  • 警告您的代码容易受到 sql 注入攻击!

标签: php


【解决方案1】:

我认为这只是您查询中的空格问题,请尝试添加空格

$construct .=" AND keywords LIKE '%$search_each%'";

另请注意,keyword 应该是您要查找的表列的名称。

我还想提醒您,mysql_ 函数已被弃用,因此我建议您切换到 mysqliPDO,确实您有 sql 注入的风险

【讨论】:

  • 这就是返回的结果:您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 'AND keywords LIKE '% 附近使用的正确语法
  • 尝试打印您的查询以查看它的外观。我建议在$construct_query = "SELECT * FROM members WHERE $construct"; echo $construct_query; $run = mysql_query($construct_query); 中更改您的查询
【解决方案2】:

这可能是因为 SQL 请求失败。尝试在$run = mysql_query($construct) 旁边附加or die(mysql_error()),如下所示:

$run = mysql_query($construct) or die(mysql_error());

这应该会输出错误,以便您修复它。

【讨论】:

    【解决方案3】:

    查询中可能有错误。试试这个:

    $run = mysql_query($construct);
    if (!$run)
      echo 'an error occurred: '.mysql_error();
    else {
      $foundnum = mysql_num_rows($run);
      if ($foundnum==0)
      echo "Sorry, there are no matching result for <b>$search</b>.
      </br></br>1. Try more general words.";
    else {
      echo "$foundnum results found !<p>"; 
      while($runrows = mysql_fetch_assoc($run)) {
        $username = $runrows ['username'];
        $email = $runrows ['email']; 
      } 
    }
    

    此脚本会告诉您问题所在。正如 Fabio 所写,您可能会看到 MySQL 从预期的空间开始报告。 (如果你想在你的网站上使用它,你可能需要在这个例子中添加一些 br 标签。)

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      相关资源
      最近更新 更多