#php #wordpress
Вопрос:
Я пытаюсь установить файл cookie, содержащий идентификатор записи, но только в том случае, если текущий идентификатор записи отсутствует в таблице. Код работает, но я получаю предупреждение PHP «Неопределенное смещение: 0» от wp-includes/wp-db.php и мне интересно, что я сделал не так.
function getFromDatabase() {
global $wpdb;
$sql = $wpdb->prepare( "SELECT page_id FROM foo WHERE page_id IS NOT NULL" );
$result = $wpdb->get_results( $sql );
$resultsArray = array();
foreach ( $result as $row ) {
$resultsArray[] = $row->page_id;
}
return $resultsArray;
}
...
$currentPID = get_the_id();
$ignoredPIDs = getFromDatabase();
if ( !in_array($currentPID, $ignoredPIDs) ) {
// Set a cookie to post ID
}
Я должен упомянуть, что запрос к БД всегда будет возвращать по крайней мере один результат. Любые мысли по этому поводу были бы весьма признательны.
Обновление — Обнаружена проблема, это был вызов $wpdb->prepare
. Это всего лишь предположение, но ничего не требовало подготовки, все жестко закодировано, и, возможно, он жаловался на это.
Комментарии:
1. Ошибка также должна содержать номер строки. Похоже, в предоставленном вами коде нет никаких проблем. Но где-то вы пытаетесь получить доступ к 0-му элементу пустого массива (может быть, результат
getFromDatabase()
, если он пустой?
Ответ №1:
Не имея возможности увидеть, что находится в базе данных getFromDatabase:
Я знаю, вы сказали, что запрос к БД всегда будет возвращать хотя бы один результат, но, черт возьми, попробуйте проверить наличие пустого. Если это работает, то ваша проблема, очевидно, в функции getFromDatabase.
$currentPID = get_the_id();
$ignoredPIDs = getFromDatabase();
if(!empty($ignoredPIDs)) {
if ( !in_array($currentPID, $ignoredPIDs) ) {
// Set a cookie to post ID
}
}
Комментарии:
1. Хм, это не исправило ситуацию, но проблема определенно кроется в функции getFromDatabase. Функция возвращает массив, и если вместо выполнения SQL-запроса я просто определяю массив и возвращаю его, я не получаю предупреждения. Это определенно как-то связано с тем, как я запрашиваю базу данных и упорядочиваю результаты для возврата, но я не уверен, как я все испортил.
2. Возможно, вам захочется опубликовать код для функции getFromDatabase, если вам нужна дополнительная помощь от знающих людей в стеке.