Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress数据库错误:[查询为空]的可能原因是什么?_Php_Mysql_Wordpress_Wordpress Theming - Fatal编程技术网

Php WordPress数据库错误:[查询为空]的可能原因是什么?

Php WordPress数据库错误:[查询为空]的可能原因是什么?,php,mysql,wordpress,wordpress-theming,Php,Mysql,Wordpress,Wordpress Theming,我在下面遇到了错误,但似乎无法获得正确的错误日志 WordPress数据库错误查询对于由进行的查询为空 我有这样的代码,将抛出几乎类似于上面的错误 $query_select = $wpdb->get_results($wpdb->prepare( " % " , 1 ),ARRAY_A); 我的问题是,有哪些可能的代码会抛出query was empty,就像我上面的代码一样 有一些可能的方法可以获得这些类型的错误。下面的用法可能对您有用,也可能不有用 使用$wp

我在下面遇到了错误,但似乎无法获得正确的错误日志

WordPress数据库错误查询对于由进行的查询为空

我有这样的代码,将抛出几乎类似于上面的错误

$query_select = $wpdb->get_results($wpdb->prepare(
    " % "
    , 1
),ARRAY_A);

我的问题是,有哪些可能的代码会抛出
query was empty
,就像我上面的代码一样

有一些可能的方法可以获得这些类型的错误。下面的用法可能对您有用,也可能不有用

使用$wpdb对象

1st方法-将$wpdb声明为全局,并使用它执行返回PHP对象的SQL查询语句

global $wpdb;
$results = $wpdb->get_results( 'SELECT * FROM wp_options WHERE option_id = 1', OBJECT );
第二种方法-利用$GLOBALS superglobal。不需要全局关键字(但可能不是最佳做法)

一些用户在下面的堆栈交换链接中提出了此类问题


当我们执行wp db query时,它在上一次查询中更改了属性。 我不明白你的问题,但下面的代码,如果这对你有帮助

global $wpdb;
   $wpdb->get_results( $wpdb->prepare(" % " , 1 ) );
   if( $wpdb->last_error ){
    //print_r( $wpdb->dbh)   
    $dbh = $wpdb->dbh;
    echo $dbh->errno;  // if no == 1065 then query was empty
    echo $dbh->error; // Query was empty          
   }    
参见示例。 Prepare必须有一个有效的sql查询,其中包含您希望在查询中使用的变量的占位符:

$wpdb->prepare( 
"
    SELECT sum(meta_value) 
    FROM $wpdb->postmeta //valid sql statements here
    WHERE meta_key = %s
", 
$meta_key)
同时,您的代码不起任何作用:

$wpdb->prepare(
" % " //no sql statements here
, 1 ...)
看起来你想这么做

select * from someTable where someField % 1 -- (it will return no rows)

因此,任何空查询都将返回此错误。

方法对WordPress执行此功能,它支持类似sprintf()和类似vsprintf()的语法

支持%s(字符串)、%d(整数)和%f(浮点)格式

SQL字符串文本中的所有%字符(包括类似通配符)必须作为%%进行双-%转义

因此,如果我们调试您的代码,我们喜欢这样:

$sql = $wpdb->prepare(" % ", 1);
die( var_dump($sql) );
$query_select = $wpdb->get_results( $wpdb->prepare('%%', 1), ARRAY_A );
结果将是:
字符串“”(长度=1)

天哪,空字符串!这就是为什么我们看到
查询是空的
错误

prepare方法希望格式字符串包含以下任何内容:<代码>%d,
%s
%f
。因此,如果希望SQL查询为
1
,则需要将代码更改为:

$query_select = $wpdb->get_results( $wpdb->prepare('%d', 1), ARRAY_A );
或者,如果希望SQL是
%
,则需要使用另一个
%
来转义它,如下所示:

$sql = $wpdb->prepare(" % ", 1);
die( var_dump($sql) );
$query_select = $wpdb->get_results( $wpdb->prepare('%%', 1), ARRAY_A );

您可以在此处了解有关prepare方法和占位符的更多信息

任何时候出现问题,这是一个本应关闭的可怕问题。在一个可怕的问题上添加悬赏并不能使它成为一个更好的问题。尝试完全删除插件并删除所有wp_support_*数据库表,然后重新安装并激活它们。@PieterGoosen我添加了悬赏,因为没有人回答它。