Получение нескольких строк из запроса 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, не понимаете? вроде нужен параметр здесь