php查询搜索结果不稳定

jchrr9hc  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(366)

我想创建一个搜索栏来查询我的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 结果之一。

tpgth1q7

tpgth1q71#

我怀疑您的参数没有被删减,但无论如何,我建议您使用准备好的语句
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
您知道您的sql语法可以直接工作,因此您可以通过在post页上回显sql语句进行调试。

lztngnrs

lztngnrs2#

你必须使用 mysqli_num_rows 而不是 mysqli_fetch_rowif condition 因为它已经在if条件下提取了结果,所以下次就不工作了。

<?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_num_rows($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;
}
?>
qlvxas9a

qlvxas9a3#

在sql代码中使用php-var时要小心,因为sql注入有风险
为了避免这种情况,您应该检查绑定参数的db驱动程序
无论如何,您应该以适当的方式构建查询串模式,例如:uisingconcat

$raw_results = mysqli_query($connection, "SELECT * FROM `companies`
        WHERE (`name` LIKE concat('%', '$query', '%') )");

相关问题