wpdb::prepare() isn't working

时间:2017-09-25 作者:Jonny

这是我的代码:

global $wpdb;
$table_name = $wpdb->prefix . \'product_codes\';

// Check if codes exist
$query = $wpdb->prepare( "SELECT * FROM %s", $table_name ); 
$existing_data = $wpdb->get_results( $query );

// Returns empty array despite data existing
print \'<pre>\';
print_r( $existing_data );
print \'</pre>\';
如果我按字面意思输入表名,它就会起作用。如果我打印出table name变量,它将显示正确的字符串。但由于某种原因,当我使用上面的代码时,我得到了一个空数组-零结果。

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

问题是在My/SQL表中,名称不是字符串。所以\'wp_product_codes\' 被解释为字符串而不是实际的表。这就是为什么您通常看不到传递到wpdb::prepare() - 您应该知道表名,因为它们不会更改位置wpdb::prepare() 用于您可能不知道/不可信任且需要清理的数据。因此,让我们修改查询:

$existing_data = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}product_codes" );
printf( \'<pre>%1$s</pre>\', print_r( $existing_data, 1 ) );
die();

结束

相关推荐

WP_QUERY返回匹配,没有条件

我有一个小的搜索表单,可以重定向到基于“想法编号”的页面。创意编号是唯一的编号,因此任何时候都只能有一个匹配项。但我的查询失败,没有任何条件。以下代码将。。如果idea\\u num匹配,则完全重定向。如果没有匹配,则重定向回原始页面,并返回错误If no criteria... it still will redirect to a page where the idea_num doesn\'t match??? What am I missing here?$post_types = array(