我是这里的新用户,我的搜索结果有问题。我目前正在建立一个具有搜索帖子功能的网站。它与 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/