自定义搜索引擎查询返回false phpMyAdmin

时间:2017-04-29 16:50:22

标签: php mysql

我正在尝试使用phpMyAdmin制作自定义搜索引擎,并且一直在搜索数小时尝试找到修复我的查询返回false。我是php和sql的新手,所以如果有人能向我解释我做错了什么,那就太棒了!

<html>
  <head>
    <title>Results</title>
    <h1>Search Results</h1>
  </head>
</html>
<?php

$search = $_GET['query'];

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("unblocked_search");

$query = mysql_query("SELECT * FROM unblocked_search WHERE title LIKE '%".$search."%'");
if(mysql_num_rows($query) >= 1) {
    while($a = mysql_fetch_array($query)) {
        echo "<a href='".$a['link']."'>".$a['title']."</a><p>".$a['description']."</p><hr/>";
    }

  } else {
    echo "Oh no! Nothing was found.";
  }
?>

1 个答案:

答案 0 :(得分:0)

PHP mysql_query函数需要两个参数。第一个参数是查询字符串。第二个参数是连接。

参考:http://php.net/manual/en/function.mysql-query.php

  

正如@Barmar在下面的评论中指出的那样,mysql_query的第二个参数是可选的。因此,上述答案可能与观察到的行为无关。

就调试问题而言,我建议您先切换到使用mysqli_或PDO。然后添加代码以检查函数调用的返回值;测试与数据库的连接是否成功。测试查询的执行是否成功。

启用PHP错误报告。如果发生错误,您想了解它。不要让你的代码把它的小拇指放在它的嘴角和Dr.Evil风格

  斯科特邪恶:等等,你甚至不去看他们吗?他们可以逃脱!

     

博士。邪恶:不,不,我会让他们独自离开,而不是亲眼目睹他们死亡,我只是假设一切都按计划进行。什么?

注意:

如文档中所示,mysql_接口函数已弃用(并在PHP 7中删除。)新开发应使用mysqli_或PDO。 mysqli_函数与大多数已弃用的mysql_函数相对应,尽管存在一些差异。请注意,mysqli_query的参数顺序不同。

这是mysqli_query函数的文档:

http://php.net/manual/en/mysqli.query.php

此外,最佳做法是将预备语句绑定占位符一起使用。如果我们绝对需要在SQL文本中包含可能不安全的值,那么当我们这样做时,值必须被正确转义。有专门为此设计的功能:

参考:http://php.net/manual/en/mysqli.real-escape-string.php

(注意:这是对mysqli_函数的引用。混合mysql_和mysqli_接口函数;使用其中一个。(实际上,不要使用mysql_根本就是使用mysqli _。)

如果我们通过预先准备好的语句中的绑定占位符提供值,则不需要对其进行转义。

$search = $_GET['query'];

if(!$dbh = mysqli_connect('localhost', 'user', 'password', 'database') {
   // connect failed
   die( mysqli_connect error() );
}

// static SQL text, not vulnerable to SQL Injection
$sql = "SELECT * FROM unblocked_search WHERE title LIKE CONCAT('%', ? , '%')";

if(!$sth = mysqli_prepare($dbh, $sql)) {
   // prepare failed
   die( mysqi_error($dbh) );
} else {
   mysqli_stmt_bind_param($sth,'s',$search);
   if( mysqli_stmt_execute($sth) ) {
      $result = mysqli_stmt_get_result($sth);
      while( $row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
         echo "\n<br> $row['name'] <br> $row['description'] ";
      }
   } else {
      // execute failed
      die( mysqli_error($dbh) );
   }
}

注意:我们使用die作为占位符,代替更合适的错误处理(记录信息,向用户返回错误页面等等。