Php WordPress数据库错误:[查询为空]的可能原因是什么?
我在下面遇到了错误,但似乎无法获得正确的错误日志 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
$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我添加了悬赏,因为没有人回答它。