Как я могу сделать этот запрос MySQL с PDO? - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь построить с помощью рекурсивной функции, которая показывает категории меню параметров, делая отступ.Это прекрасно работает в запросе MySQL, но как я могу сделать это в запросе PDO?

За любую помощь спасибо.

Я изменил некоторые строки, и я также изменил правильное подключение базы данных к PDO,но не сработало.

измененные строки:

$dbc = $db->prepare("SELECT * FROM categories ORDER BY title");
$dbc->execute(array());

while (list($id, $parent_id, $category) = $dbc->fetchAll(PDO::FETCH_ASSOC)) {

Мой запрос mysqli нужно изменить на PDO:

$db = mysqli_connect("localhost","","","");

echo '<select name="parent_id">
      <option value="">Select</option>';

function make_list ($parent,$depth) {

    global $option;


    foreach ($parent as $id => $cat) {

        $whitespace = str_repeat(' - ', $depth * 1);
        echo '<option value="' . $cat['id'] . '">'. $whitespace . $cat['category'] . '</option>';

        if (isset($option[$id])) {

            make_list($option[$id], $depth+1);

        }
    }
}

$dbc = mysqli_query($db, "SELECT * FROM categories ORDER BY title");

$option = array();

while (list($id, $parent_id, $category) = mysqli_fetch_array($dbc, MYSQLI_NUM)) {

    $option[$parent_id][$id] =  array('category' => $category, 'id' => $id, 'parent_id' => $parent_id);

}
make_list($option[0], $depth = 0);

echo '</select>';

Здесь сообщения об ошибках:

Строка 36: foreach ($ parent как $ id => $ cat) {

Строка 56: while (список ($ id, $ parent_id, $category) = $ dbc-> fetchAll (PDO :: FETCH_ASSOC)) {

Строка 58: $ option [$ parent_id] [$ id] = array ('category' => $категория, 'id' => $ id, 'parent_id' => $ parent_id);

Строка 61: make_list ($ option [0], $ глубина = 0);

<select name="parent_id">
      <option value="">Select</option><br />
<b>Warning</b>:  Illegal offset type in <b>/Users/test/Documents/functions/pdo-optionmenu.php</b> on line <b>58</b><br />
<br />
<b>Notice</b>:  Undefined offset: 0 in <b>/Users/test/Documents/functions/pdo-optionmenu.php</b> on line <b>56</b><br />
<br />
<b>Notice</b>:  Undefined offset: 1 in <b>/Users/test/Documents/functions/pdo-optionmenu.php</b> on line <b>56</b><br />
<br />
<b>Notice</b>:  Undefined offset: 2 in <b>/Users/test/Documents/functions/pdo-optionmenu.php</b> on line <b>56</b><br />
<br />
<b>Notice</b>:  Undefined offset: 0 in <b>/Users/test/Documents/functions/pdo-optionmenu.php</b> on line <b>61</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/Users/test/Documents/functions/pdo-optionmenu.php</b> on line <b>36</b><br />
</select>

1 Ответ

0 голосов
/ 07 марта 2019

Поскольку в вашем запросе нет небезопасных данных, нет необходимости использовать prepare, используйте простую функцию query:

$dbc = $db->query("SELECT * FROM categories ORDER BY title");

Далее, fetchAll выборки все результаты немедленно.Вам нужно выбрать строку за строкой.В случае query это можно сделать как

foreach ($dbc as $row) {
    print_r($row);
}

или с помощью fetch метод:

while ($row = $dbc->fetch()) {
    print_r($row);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...