这很奇怪。我刚刚升级到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直接获取一个方法的输出?
发布于 2013-11-12 18:03:25
据我所知,它似乎并不是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);https://stackoverflow.com/questions/19935956
复制相似问题