我的$wpdb查询有什么问题?

时间:2014-08-27 作者:autorun

我只是想查询第一个用户,但它输出了这个错误,

WordPress database error: [您的SQL语法有错误;请查看与MySQL server版本对应的手册,以了解第1行“wp\\U users”,其中ID=1”附近要使用的正确语法]从ID=1的“wp\\U users”中选择*

还有我的代码,

<?php   
global $wpdb;

$wpdb->show_errors();

$sql = $wpdb->prepare( "SELECT * FROM %s WHERE ID = %d" , $wpdb->users, 1);
$results = $wpdb->get_results($sql);

echo \'<pre>\';
print_r($results);
echo \'</pre>\';    
?>

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

当您使用$wpdb->prepare 占位符%s 替换为引号之间的内容,因此,您的查询变成:

"SELECT * FROM \'wp_users\' WHERE ID = 1"
但是SQL查询中的表名必须not 用引号括起来。因此,正确的方法是:

$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->users} WHERE ID = %d", 1 );
$results = $wpdb->get_results($sql);
请注意,这可能不起作用,因为无法确保存在id为1的用户。(实际上,出于安全原因,有人不鼓励使用ID=1的用户)。

如果要选择第一个用户,最好使用以下内容:

$user = $wpdb->get_row( "SELECT * FROM {$wpdb->users} ORDER BY ID ASC LIMIT 1" );
通过这种方式,您可以获得第一个用户行,无论其ID是什么。

结束

相关推荐

Add CPT values to Database

我不确定这是不是件容易的事。我有一个插件,具有定制帖子类型所需的所有功能:过滤器、导航。。。我需要为这个CPT创建很多帖子(使用分类法)(需要做很多工作才能正确创建它)。所以我只想添加一次这个自定义帖子,而不是每次我想利用我在其他网站的插件。。。实现这一目标的最佳方式是什么?我是不是每次都要进行某种形式的进出口贸易?我应该利用wp\\u insert\\u post并对帖子的内容进行硬编码吗?为我的英语道歉,我不知道我是否已经解释过了。。。谢谢