$wpdb->Get_Results(...)尽管查询正确,但返回空数组

时间:2014-09-22 作者:1Up

正如标题所暗示的,我似乎无法获取$wpdb->get\\u results来给出结果。运行“原始”查询是成功的,但由于一些奇怪的未知原因,这似乎失败了。

    global $wpdb;


    $sql = "SELECT *
            FROM something aki, 
                 somethingelse akb, 
                 somethingelseelse ac 
            WHERE aki.keyID = akb.keyID 
              AND akb.someID = ac.someID 
              AND aki.type LIKE \'%thing%\'";

    $corps = $wpdb->get_results($sql, OBJECT);

    var_dump($corps);

4 个回复
SO网友:NoOne

使用$wpdb->show_errors( true ) 然后查看返回的错误。

我的问题(因为我也经历过同样的事情)是我应该使用$wpdb->posts 而不是wp_posts 在查询内部。根据时间的不同,表的前缀可以在不同的WP安装中更改,甚至在相同的安装中更改(例如,管理员可以随时更改前缀)。因此,应该这样编写查询:

$query = "select <stuff here> from $wpdb->posts where <stuff here>";

SO网友:Debbie Kurth

可能有点晚了,但您缺少wordpress中必要的“准备”调用:

$Table_Name    = $wpdb->prefix.\'Your Table Name\';
$sql_query     = $wpdb->prepare("SELECT * FROM $Table_Name WHERE aki.keyID=%d AND akb.someID=%d AND aki.type like %s", akb.keyID, ac.someID, \'\'%thing%\');
$result        = $wpdb->query( $sql_query ); 
在数组中可以找到多个结果。

SO网友:Dave DiNatale

我有同样的问题a,一个好的sql语句,没有错误,但使用wpdb没有结果。

对我来说,解决方法是为我的表使用正确的排序规则/字符编码(例如,COLLATE“utf8\\U general\\U ci”)。

我有一个有效的查询,该表被另一台服务器(和旧服务器)的转储文件替换,我的查询停止工作。它返回NULL或0,即使在数据库中运行查询也会返回正确的结果。

我以两种方式创建表(有几次,因为我不相信),运行相同的数据插入脚本,并且没有更改我的PHP/wpdb代码。

使用此创建表时,我的查询不起作用。

CREATE TABLE IF NOT EXISTS `vf_user` (
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  `email` varchar(50) NOT NULL,
  `full_name` varchar(25) NOT NULL,
  `password` varchar(25) NOT NULL,
  `role` enum(\'user\',\'tester\',\'admin\') NOT NULL DEFAULT \'user\',
  `phone` varchar(25) NOT NULL,
  `last_modified` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `user_activation_key` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=325 DEFAULT CHARSET=utf8 COMMENT=\'users table\';
当用这个创建查询时,我的查询确实返回了结果

CREATE TABLE `vf_user` (
    `id` MEDIUMINT(9) NOT NULL AUTO_INCREMENT,
    `email` VARCHAR(50) NOT NULL COLLATE \'utf8_general_ci\',
    `full_name` VARCHAR(25) NOT NULL COLLATE \'utf8_general_ci\',
    `password` VARCHAR(25) NOT NULL COLLATE \'utf8_general_ci\',
    `role` ENUM(\'user\',\'tester\',\'admin\') NOT NULL DEFAULT \'user\' COLLATE \'utf8_general_ci\',
    `phone` VARCHAR(25) NOT NULL COLLATE \'utf8_general_ci\',
    `last_modified` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
    `user_activation_key` VARCHAR(100) NULL DEFAULT NULL COLLATE \'utf8_general_ci\',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE INDEX `email` (`email`) USING BTREE
)
COMMENT=\'users with access to the virtual festival\'
COLLATE=\'utf8_general_ci\'
ENGINE=InnoDB
AUTO_INCREMENT=325
;

SO网友:bishtb

Wpdb->;wordpress的get\\u results函数如果成功,将返回结果,否则将返回null。如果查询失败,可能有很多原因。请参阅有关调试的深入文章get_results() returning empty results here

虽然您可以使用以下函数wpdb->show_error() 检查执行sql查询后的最后一个错误是什么。有时此错误返回空,然后尝试使用wpdb->last_query 检查形成的最终查询。

结束

相关推荐

为显示双标题的其他主页加载第二个Header.php。

我正在加载第二个标题。php用于其他主页,但它显示双标题。这就是我如何调用第二个标题<?php get_header(\'secondheader\'); ?> 文件名为:header secondheader。php但它显示了两个标题。php和header secondheader。php显示双标题如何解决这个问题?