php запрос поиска ошибочные результаты - PullRequest
0 голосов
/ 04 мая 2018

Я хочу создать панель поиска для запроса моей базы данных 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 ]

0 голосов
/ 04 мая 2018

Вы должны использовать mysqli_num_rows вместо mysqli_fetch_row в if 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;
}
?>
0 голосов
/ 04 мая 2018

Я подозреваю, что ваш параметр не обрезается, но в любом случае я предлагаю вам использовать подготовленные операторы

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

Вы знаете, что ваш синтаксис sql работает напрямую, поэтому вы можете отлаживать его, повторяя оператор sql на странице поста.

0 голосов
/ 04 мая 2018

Будьте осторожны, используя php var в вашем sql-коде, вы рискуете получить sqlinjection

Во избежание этого вы должны проверить драйвер БД для обязательного параметра

В любом случае, вы должны правильно построить цепочку запросов, например: uisng concat

  $raw_results = mysqli_query($connection, "SELECT * FROM `companies`
        WHERE (`name` LIKE concat('%', '$query', '%') )");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...