我想创建一个搜索栏来查询我的mysql数据库。
<?php
$query = $_POST['search_name'];
$min_length = 3;
if(strlen($query) >= $min_length){
$query = mysqli_real_escape_string($connection,$query);
$raw_results = mysqli_query($connection, "SELECT * FROM `companies`
WHERE (`name` LIKE '%$query%')");
if(mysqli_fetch_row($raw_results) > 0){
while($results = mysqli_fetch_row($raw_results)){
echo "<p>".$results[0]." ".$results[1]."</p>";
}
}
else{ // if there is no matching rows do following
echo "No results";
}
}
else{ // if query length is less than minimum
echo "Minimum length is ".$min_length;
}
?>
现在,如果我输入gaio,我就不会得到结果 Gaiotto Automation
. 如果我直接在sql终端中输入查询
SELECT * FROM `companies` WHERE (`name` LIKE '%gaio%')
那么结果就是 Gaiotto Automation
,这就是我想要的。如果我在搜索栏里输入 autom
然后我得到 Gaiotto Automation
结果之一。
3条答案
按热度按时间tpgth1q71#
我怀疑您的参数没有被删减,但无论如何,我建议您使用准备好的语句
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
您知道您的sql语法可以直接工作,因此您可以通过在post页上回显sql语句进行调试。
lztngnrs2#
你必须使用
mysqli_num_rows
而不是mysqli_fetch_row
在if condition
因为它已经在if条件下提取了结果,所以下次就不工作了。qlvxas9a3#
在sql代码中使用php-var时要小心,因为sql注入有风险
为了避免这种情况,您应该检查绑定参数的db驱动程序
无论如何,您应该以适当的方式构建查询串模式,例如:uisingconcat