Получение нескольких строк из запроса MySQL с подготовленными операторами?

Я просматривал некоторые уроки по подготовленным операторам и не мог понять, как пройтись по результатам, которые содержат несколько строк. Я привык к процессуальному стилю

while($row = mysqli_fetch_array($result))

Однако я не могу понять, как это сделать с помощью подготовленного формата заявления.

if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE '%?%'")){

        $stmt->bind_param("s", $query); //query is $_GET['query'], user input

        $stmt->execute();
        $result = null;
        $stmt->bind_result($result);

        while($stmt->fetch()){ //problematic code...
            echo $result;
        }

        $stmt->close();
}

Как я могу перебрать несколько строк, полученных в результате подготовленного SQL-запроса оператора в PHP?

РЕДАКТИРОВАТЬ (новый код по запросу):

/* Create a prepared statement */
    if($stmt = $mysqli->prepare("SELECT name, price, description, file FROM `Products` WHERE name LIKE '%?%'")){

        $stmt->bind_param("s", $query) or die('bind_param');
        $query = trim(htmlspecialchars($_GET['query']));
        $stmt->execute() or die('execute');
        $stmt->bind_result($name, $price, $description, $file) or die('bind_result');


        while($stmt->fetch()){
            echo $name;
        }

        $stmt->close();
    }

2 ответа

Решение

Ваша проблема не в то время, а в как. Ваш SELECT должен быть:

"SELECT * FROM `Products` WHERE name LIKE ?"

И ваша переменная $query:

$query = '%'.$_GET['query'].'%';

Замени это

if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE '%?%'")){

с этим

if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE ?")){

тогда все будет хорошо:)

причина в том, что вы используете '%?%' php, не понимаете? вроде нужен параметр здесь

Другие вопросы по тегам