Вопрос или проблема
Я пытаюсь преобразовать этот код, чтобы использовать $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()
, чтобы повысить безопасность при работе с пользовательскими данными.