Я думаю, что вы пытаетесь перебрать неправильный набор результатов.И я не уверен, установлен ли атрибут num_rows
в fetchAll.
Вы можете заменить детали if
и while
одной while
/ foreach
.Если вы хотите использовать функцию fetchAll , вы можете просто foreach
зациклить набор результатов.Однако, если вы выполняете большой запрос, это может занять много памяти, поэтому не всегда предпочтительнее это делать.
Для решения fetchAll вы получите следующее:
$results = $query->fetchAll()
foreach ($results as $result) {
var_dump($result); // Process data here.
}
Если вы хотите использовать функцию fetch , которая более дружественна к памяти и ресурсам, вы можете использовать цикл while, как вы использовали в MySQLi:
while ($data = $query->fetch()) {
var_dump($data); // Process data here.
}
edit:
Я только что заметил, что вы напрямую вставляете переменные в запрос, это плохая практика, так как она допускает sql-инъекцию.Если вы все равно используете PDO, взгляните на подготовленные операторы , вы можете заменить переменную на заполнитель, например.:parent_id
затем при вызове execute вы передаете массив, который содержит значение parent_id, и он предотвращает некоторые инъекции sql.
Это будет выглядеть так:
$query = 'select * from ws_categories where parent_id = :parent_id';
$statement = $connection->prepare($query);
$statement->execute(['parent_id' => $parent_id]);