2013-11-12 2 views
1

Это очень странно. Я просто повышен до WordPress 3.7.1, и я вдруг начал получать ошибкуArray_pop + WordPress 3.7.1 "get_results" = ошибка?

PHP Warning: array_pop() expects parameter 1 to be array, null given in (...) 

Вот соответствующий фрагмент кода:

$User = array_pop($RM->DB->get_results($RM->DB->prepare(
    'SELECT 
     `user_id` AS `ID`, 
     `api_key` AS `key` 
    FROM 
     `rm_users` 
    WHERE 
     user_id = %d' 
    , $user_value))); 

Здесь я использую WordPress в $ wpdb объекта для запроса пользовательских столы. Странно, если я изменю его на это:

$Users = $RM->DB->get_results($RM->DB->prepare(
    'SELECT 
     `user_id` AS `ID`, 
     `api_key` AS `key` 
    FROM 
     `rm_users` 
    WHERE 
     user_id = %d' 
    , $user_value)); 
$User = array_pop($Users); 

Это прекрасно работает. Если array_pop получал нулевой параметр, то он означает, что $ Users будет пустым и вызовет ту же ошибку, но не является нулевой и не вызывает ошибку. Точно так же везде я использую метод get_results WordPress вместе с «array_pop».

Является ли это законной ошибкой php или есть какой-то глубокий механик, о котором я не знаю, это помешало бы array_pop напрямую принимать выходные данные метода?

ответ

1

Насколько я могу судить, это ошибка WP, и я не уверен, почему она началась только с 3.7.1.

Я выполнил следующее на пользовательской таблице, используя оба метода, которые вы предоставляете, на 3.7.1, и оба возвращают один объект stdClass, как ожидалось.

// Get one out with pop 
print_r(array_pop($this->_wpdb->get_results($this->_wpdb->prepare(
    'SELECT 
     CONCAT(user.firstname," ",user.surname) AS name, 
     user.email, 
     user.mobile, 
     user.userType 
    FROM user 
    WHERE userId=%d 
    LIMIT 1;', 
    $userId)))); 

// get one out with 2-step 
$users = $this->_wpdb->get_results($this->_wpdb->prepare(
    'SELECT 
     CONCAT(user.firstname," ",user.surname) AS name, 
     user.email, 
     user.mobile, 
     user.userType 
    FROM user 
    WHERE userId=%d 
    LIMIT 1;', 
    $userId)); 
print_r(array_pop($users)); 

Вместо того чтобы использовать поп, используйте get_row method:

$User = $RM->DB->get_row($RM->DB->prepare(
    'SELECT 
     `user_id` AS `ID`, 
     `api_key` AS `key` 
    FROM 
     `rm_users` 
    WHERE 
     user_id = %s' 
    , $user_value)); 

Или, если вы предпочли бы результат в виде ассоциативного массива, а не как StdClass:

$User = $RM->DB->get_row($RM->DB->prepare(
    'SELECT 
     `user_id` AS `ID`, 
     `api_key` AS `key` 
    FROM 
     `rm_users` 
    WHERE 
     user_id = %s' 
    , $user_value), ARRAY_A); 
+0

Это не решает тайна, но она решает проблему и читает лучше, поэтому в конечном итоге это, вероятно, так, как я должен это делать. – JProffitt

 Смежные вопросы

  • Нет связанных вопросов^_^