Как мне получить каждую строку в виде ассоциативного массива, используя $wpdb?

Вопрос или проблема

Я пытаюсь преобразовать этот код, чтобы использовать $wpdb.

$data = array();

$query = "SELECT * FROM videos";
$query_exec = mysql_query($query) or die();

while($row = mysql_fetch_array($query_exec)) {
    if ( $row['video'] == "http://youtu.be/".end(explode('http://youtu.be/',$row['video'])) ) {
            $data[$row['id']] = end(explode('http://youtu.be/', $row['video']));
        } else {
            $data[$row['id']] = end(explode('?v=', $row['video']));
        }   
    }

Итак, я сделал следующее:

$query = $wpdb->get_results("SELECT * FROM videos");

Но как мне получить массив?
Заранее спасибо за помощь.

wpdb‘s get_results метод принимает необязательный второй аргумент, который позволяет вам указать, как данные будут возвращены. Значение по умолчанию – это объект. Но вы также можете установить это на…

OBJECT – результат будет выведен как численно индексированный массив объектов строк.

OBJECT_K – результат будет выведен как ассоциативный массив объектов строк, используя значения первой колонки в качестве ключей (дубликаты будут отброшены).

ARRAY_A – результат будет выведен как численно индексированный массив ассоциативных массивов, используя названия колонок в качестве ключей.

ARRAY_N – результат будет выведен как численно индексированный массив численно индексированных массивов.

(из кодекса)

Вероятно, вам нужно ARRAY_A.

<?php
$query = $wpdb->get_results("SELECT * FROM videos", ARRAY_A);

К сожалению, wpdb не позволяет вам “потоково” получать результаты, как вы делаете, поэтому вам нужно будет использовать цикл foreach.

<?php
foreach($query as $row)
{
    // делайте что-то с $row здесь.
}

Ответ или решение

Для того чтобы извлекать каждую строку результата SQL-запроса в виде ассоциативного массива, используя $wpdb в контексте WordPress, вам необходимо следовать ряду шагов. Давайте внимательно разберем, как корректно адаптировать ваш код.

1. Использование $wpdb для выполнения запроса

Для начала, необходимо убедиться, что вы подключили класс $wpdb, который используется для взаимодействия с базой данных в WordPress. Предполагается, что вы уже подключили WordPress, и можете использовать его API.

2. Выполнение SQL-запроса

Ваш исходный код использовал функцию mysql_query, которая уже устарела и потенциально небезопасна. Вместо этого, вы корректно использовали $wpdb->get_results() для выполнения запроса:

$query = $wpdb->get_results("SELECT * FROM videos", ARRAY_A);

В этом случае, второй параметр ARRAY_A указывает, что результатом будет массив ассоциативных массивов, причем ключами будут имена колонок.

3. Обработка результата

Теперь, когда у вас есть результат в виде массива ассоциативных массивов, вам нужно перебрать этот массив и обработать каждую строку:

$data = array();

foreach ($query as $row) {
    if ($row['video'] == "http://youtu.be/" . end(explode('http://youtu.be/', $row['video']))) {
        $data[$row['id']] = end(explode('http://youtu.be/', $row['video']));
    } else {
        $data[$row['id']] = end(explode('?v=', $row['video']));
    }
}

4. Подробное объяснение

  • $wpdb->get_results(): Этот метод выбирает данные из базы и возвращает их в формате, заданном вторым параметром. Использование ARRAY_A позволяет получать данные в виде массивов, что удобно для доступа к значениям по ключам.

  • foreach: После получения данных, мы используем цикл foreach, чтобы пройтись по всем полученным строкам. В каждой итерации мы получаем одну строку данных, на которую можно применять нужные манипуляции.

5. Заключение

На основании вышеизложенного, ваш код должным образом преобразуется для работы с $wpdb, что не только улучшает безопасность вашего приложения, но и позволяет следовать современным стандартам разработки в рамках WordPress. Использование класса $wpdb повышает производительность и надежность вашего кода, что особенно важно при работе с базами данных.

Убедитесь в правильности написанных запросов, чтобы избежать SQL инъекций и ошибок, связанных с базой данных. Вы можете также рассмотреть возможность использования параметризованных запросов $wpdb->prepare(), чтобы повысить безопасность при работе с пользовательскими данными.

Оцените материал
Добавить комментарий

Капча загружается...