【问题标题】:PHP MYSQL search always brings back 0 resultsPHP MYSQL 搜索总是返回 0 个结果
【发布时间】:2015-04-21 22:30:45
【问题描述】:

您好,我正在尝试在 php 中编写搜索功能,但我总是找到 0 个结果。

<?php
$mysqli = new mysqli('localhost', 'root', 'testing123', 'test') 
if ($mysqli->connect_error) {
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
} 
//collect
$output = '';
if(isset($_POST['search'])){
    $searchq = $_POST['search'];
    $searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
    $query = mysqli_query($mysqli, "SELECT * FROM Users WHERE UsernameLIKE '%$searchq%'");
    $count = mysqli_num_rows($query);
    // if the $result contains at least one row
    if ($query->num_rows > 0) {
        // output data of each row from $result
        while($row = $query->fetch_assoc()) {
        }
    }
    else {
        echo '0 results';
    }
}    
?>

任何想法如何解决?

编辑 1. 即使注释掉,这仍然无法解决。

if(!empty($_POST['search'])){
    $searchq = $_POST['search'];
    //$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
    $query = mysqli_query($mysqli, "SELECT * FROM Users WHERE Username LIKE '$searchq%'");
    $count = mysqli_num_rows($query);
    // if the $result contains at least one row
    if ($query->num_rows > 0) {
        // output data of each row from $result
        while($row = $query->fetch_assoc()) {
        }
    }
    else {
        echo '0 results';
    }
}

【问题讨论】:

  • 告诉我粘贴SELECT * FROM School WHERE SchoolName LIKE '%Cal Poly%' 是否返回任何内容(或一些类似的搜索词以获得结果)。
  • link php.net 上的这个注释可能会有所帮助。看起来你也调用了两次 num_rows,不认为这是必要的。
  • 这应该可以。发布您的 HTML 表单。
  • @JoeM 那么问题出在搜索查询上,而不是这个页面上。你能从你的表中添加一个示例行吗?
  • 在打开 PHP 标记后立即将错误报告添加到文件顶部,例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);,然后是其余代码,以查看它是否产生任何结果,以及 @987654326 @到mysqli_query()

标签: php search mysqli


【解决方案1】:

为了匹配学校、学校名称或学校名称 1

您的查询需要读取为并删除开头的%,只保留结尾的%

WHERE SchoolName LIKE '$searchq%'"

现在,它没有找到 School Name 和 School Name 1 的原因是它包含空格,而您的正则表达式没有替换这些空格。

$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
  • 注释或修改正则表达式。

通过注释掉它,您可以恢复使用:

WHERE SchoolName LIKE '%$searchq%'"

【讨论】:

  • 注释掉该行后,它仍然无法按预期工作,因为它仍然显示 0 个结果 我已经更新了原始帖子,因为它太长了,无法发表评论
  • @JoeM 我进行了编辑,重新加载以查看底线
  • @JoeM 我看到了您的编辑,但您没有重新加载我的答案。查看“通过将其注释掉,您可以恢复使用:”WHERE SchoolName LIKE '%$searchq%'"
  • 试过了,还是没区别。即使是学校名称 1 也不适用于开头的 %
  • @Ghost 呵呵是的,那会很棒。我很高兴这只是一个错字。希望你一切都好,我的朋友:-)
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
相关资源
最近更新 更多