这很奇怪。我刚刚升级到WordPress 3.7.1,我突然开始收到错误
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正在接收一个null参数,那么它表示$ Users将为null并且会导致相同的错误,但它不是null并且它不会导致错误。我使用WordPress的“get_results”方法和“array_pop”的方法都是一样的。
这是一个合法的php错误,还是有一些我不知道会阻止array_pop直接获取方法输出的深层机制?
答案 0 :(得分: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));
,而不是使用pop
$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);