简单搜索功能总是返回0个结果

3

我有这段 PHP 代码:

if(isset($_POST['submit'])){

$likeString = '%' . $_POST['search'] . '%';
$query = $conn->prepare("SELECT * FROM images WHERE image_caption LIKE ?");
$query->bind_param('s', $likeString);
$query->execute();

    var_dump($likeString);
    if (!$query) {
      printf("Query failed: %s\n", $mysqli->error);
      exit;
    }   
    if($res->num_rows > 0) {
       while ($row = $res->fetch_assoc()) {          
             echo "<br>Title: " . $row['image_caption'];          
       }
    } else { 
          echo " <br> 0 results"; 
    }

}

var_dump($likeString) 显示了我通过搜索表单发布的单词。此外,我尝试在phpmyadmin中直接运行此查询:

SELECT * FROM images WHERE image_caption LIKE "%Volvo%"

我收到了一个正确的结果。但是在页面上我看到 0个结果。尝试使用fetch来调试:

$res->fetch_assoc()
$res->fetchAll()
$res->fetch()

没有任何结果显示。我确信是一个非常愚蠢的简单错误,但是看不到它。请帮忙解决。

我没有遇到“在非对象上调用成员函数bind_param()”的问题,这是我从答案中进行修改时犯的错误。问题仍然存在——0个结果

更新:当前代码

$likeString = "%{$_POST['search']}%";
$query = $conn->prepare("SELECT * FROM images WHERE image_caption LIKE ? ");
$query->bind_param('s', $likeString);
$query->execute();

    if($query->num_rows > 0) {
       while ($row = $query->fetch()) {          
             echo "<br>Title: " . $row['image_caption'];          
       }
    } else { 
          echo " <br> 0 results"; 
    }

}

更新 2:已检查数据库连接 -> 结果为 连接成功

$servername = "localhost";
$username = "mydbUsername"; // it's changed for the question
$password = "myPass"; // it's changed for the question
$dbname = "myDbName"; // it's changed for the question

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";

错误:在非对象上调用成员函数execute() - Jason
变量*$res在您的代码中未定义,因此$res->num_rows > 0false*。 - Tim
问题不是重复的。我没有这个错误。 - Jason
SELECT * FROM images WHERE image_caption LIKE "%Volvo%" 你在phpmyadmin中试了吗?检查一下结果,还有检查一下你的连接。 - devpro
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/128036/discussion-between-devpro-and-jason。 - devpro
显示剩余6条评论
2个回答

5

您正在使用未定义的$res,您必须使用$query。下次打开错误报告以查看这样愚蠢的错误。


仍然是“0个结果”。我已经在顶部添加了“error_reporting(E_ALL);”和“error_reporting(0);”,但没有错误。 - Jason
error_reporting(0) 阻止错误显示。您必须设置 E_ALL 和 ini_set('display_errors', 'On')。 - nospor
你没有得到0个结果。你有一个if语句,它的条件是false,因为你使用了一个没有值的变量$res,之后你输出你获得了0个结果。 - Tim
@nospor 是在回复 Jason 的评论,因为他说“仍然没有结果”。我应该在我的评论中使用人物标签。 - Tim
@varlogtim 我已经将变量更改为$query,但仍然是“0个结果”。我已经在我的问题中编辑了当前的源代码。 - Jason

4
尝试这个:(更新你的代码)
$likeString= "%{$_POST['search']}%";
$stmt = $db->prepare("SELECT * FROM images WHERE image_caption LIKE ?");
$stmt->bind_param('s', $likeString);
$stmt->execute();

$result = $stmt->get_result();
    while ($row = $result->fetch_array(MYSQLI_NUM))
    {
        foreach ($row as $r)
        {
           echo "<br>Title: " . $r['image_caption'];                
        }
        print "\n";
    }

或者

<?php
  $conn = new mysqli("localhost","mydbUsername","myPass","myDbName");
  /* check connection */
  if ($conn->connect_errno) { 
    printf("Connect failed: %s\n", $conn->connect_error); 
    exit(); 
  }

  $query = "SELECT * FROM images WHERE image_caption LIKE %".$_POST['search']."%";

  if ($result = $conn->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        echo "<br> Title: ". $row["image_caption"]);
    }print "\n";

    /* free result set */
    $result->free();
  }

  /* close connection */
  $conn->close();
?>

应该使用$param而不是$likeString - Mohammad Nurul Huda Rimon
有什么区别吗?只是 $_POST['search'] 上的括号吗?还是没有结果... - Jason
尝试使用上述更新,可能会有帮助(不太确定)。 - Soni Vimalkumar
谢谢,但仍然没有结果。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接