php - 无法在 mysqli 中获取搜索结果

标签 php mysql database mysqli search-engine

我是这里的新用户,我的搜索结果有问题。我目前正在建立一个具有搜索帖子功能的网站。它与 mysql 一起工作得很好。然后我读到 PHP 将删除一些旧功能。所以我尝试从 mysql 转换为 mysqli 但出现了很多错误。我不知道还能做什么,因为我已经尝试了这里和谷歌的很多建议,但它仍然行不通。我的表 (search_table) 中只有 2 个字段 (title, keywords)。我需要的结果是,如果用户搜索任何'keywords',就会出现'title'

我的表格:

<form name="search_form" action="search.php" method="post">
<input type="text" name="search_posts" placeholder="Search for posts" size="20" maxlength="50"/>
<input type="submit" name="submit" value="Search" />
</form>

我的工作mysql:

<?php
$host='localhost';
$mysql_username='root';
$mysql_password='';
$database='my_db';
$connection_error='<b>Unable to connect to the database!</b>';
if(!@mysql_connect( $host , $mysql_username , $mysql_password ) || !@mysql_select_db($database))
{
die ($connection_error);
}

$search = mysql_real_escape_string(trim($_POST['search_posts']));
$find_posts = mysql_query("SELECT * FROM `search_table` WHERE `keywords` LIKE '%$search%'") ;
$count = mysql_num_rows($find_posts);
if($count == 0){
    echo 'There are no search result!';
} else {
while($row = mysql_fetch_assoc($find_posts))
{
    $title = $row['title'];
    $keywords = $row['keywords'];
    echo "<a href='#'>$title</a> >>> $keywords<br />";
}
}
?>

转换后的mysqli(问题):

<?php
$host = 'localhost';
$mysql_username = 'root';
$mysql_password = '';
$my_database = 'my_db';
$mysqli = new mysqli($host,$mysql_username,$mysql_password,$my_database);
if($mysqli->connect_errno) {
    printf("Connection to database failed: %s\n", $mysqli->connect_error);
    exit(); 
}

$search_posts = $mysqli->real_escape_string(trim($_POST['search_posts']));
$find_posts = $mysqli->query("SELECT * FROM `search_table` WHERE `keywords`='?'") or die($mysqli->error.__LINE__);

if($count == 0) {
echo 'NO SEARCH RESULTS FOUND!';
}
else {
while($row = $find_posts->fetch_assoc())
{
    $title = $row['title'];
    $keywords = $row['keywords'];
    echo "<a href='#'>$title</a> >>> $keywords<br />";
}
}
$mysqli->close();
?>

P/S:抱歉我的英语不好。我希望你们能帮助我或以简单的方式向我解释,因为我在这个领域没有太多知识(自学尝试和错误的东西^_^)。如果你们有更好的解决方案,只要它能像旧的那样工作,我将不胜感激。提前致谢。

最佳答案

当你输入“?”时在查询中,这就是您执行“准备好的语句”的方式。但是,(a) mysqli->query 函数不执行准备好的语句,它执行普通的旧式一次性语句。 (b) 即使确实如此,您也永远不会将值绑定(bind)到“?”。因此,您正在搜索关键字等于字面问号的记录。

您可以像使用旧 MySQL 一样执行查询,将参数构建为字符串:

$find_posts = $mysqli->query("SELECT * FROM `search_table`
  WHERE keywords like '%$search_posts%'");

或者您可以将其作为准备好的声明来执行:

$pq =$mysqli->prepare("SELECT * FROM `search_table`
  WHERE keywords like ?");
$pq->bind_param('i', '%' . $search_posts . '%');
$pq->execute();
$find_posts=$pq->get_result();

另请注意,将测试从 LIKE 更改为 = 将会改变您的结果。您可能不想这样做。

关于php - 无法在 mysqli 中获取搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068806/

相关文章:

php - 将 15 分钟添加到当前时间并捕捉到 15 分钟的间隔

php - 是否可以检查请求是否来自 PHP 中的 &lt;script&gt; 标记?

mysql - 选择查询 zend 框架 2 的顺序和限制

mysql - MySQL中触发自增组合键

ruby-on-rails - 如何使用 Ruby on Rails 获取硬件信息?

php - 显示2个表的数据

php - AJAX 和 JSON 不起作用,没有错误或成功处理程序

mysql - Django 选择其中字段是字符串和列值的串联

database - 如何(或我可以)从 Postgresql 数据库中选择一个随机值,不包括某些特定记录?

php - 我应该为执行特定 SQL 函数的函数创建一个类吗?