我是这里的新用户,我的搜索结果有问题。我目前正在建立一个具有搜索帖子功能的网站。它与mysql正常工作。然后我读到有关PHP的信息,它将删除一些旧功能。所以我试图从mysql转换为mysqli,但出现了很多错误。我不知道该怎么办,因为我在这里和Google尝试了很多建议,但仍然无法正常工作。(title, keywords)
我的表中只有2个字段(search_table)
。'title'
如果用户搜索任何内容,就会出现我需要的结果'keywords'
。
我的表格:
<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)即使这样做,也永远不会将值绑定到“?”。因此,您正在搜索关键字等于文字问号的记录。
您可以像使用旧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更改为=将会改变结果。您可能不想这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句