非常简单的查询在SQL语法中出现错误

时间:2013-03-29 作者:Omar Mir

我相信这是一个简单的疏忽,但我似乎无法缩小范围:

 global $wpdb;
 $tablename = $wpdb->prefix . "icrm_folders";
 $sql = $wpdb->prepare( "SELECT * FROM %s", $tablename );
 //$sql results in SELECT * FROM \'wp_icrm_folders\'
 $result = $wpdb->get_results( $sql );
这似乎没有任何结果!我的调试器在last\\u错误下显示$wpdb对象上的错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'\'wp_icrm_folders\'\' at line 1
现在我运行了查询SELECT * FROM \'wp_icrm_folders\' 直接在phpmyadmin中,这给了我一个错误,因为wp\\u icrm\\u文件夹在其中\' 如果我删除撇号或将其替换为严肃的重音/字符,则查询执行良好。

PHP版本5.3.3-7

MySQL版本5.1.63

WordPress 3.5.1

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

不使用$wpdb->prepare 具有表名称。prepare 将引用将导致错误SQL的表名。

这也是不必要的开销。您的表名不应该是用户提供的数据,在您的情况下也不应该是用户提供的数据。你没有必要逃避它。”“准备”用于用户提供的数据,例如表单或$_GET 参数

您没有用户提供的数据,所以只需要

$wpdb->get_results("SELECT * FROM {$tablename}");

SO网友:Adi

我认为您没有以正确的方式编写查询。所以这里有一个小例子,可能对你有帮助。

$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );
就这样。

结束

相关推荐

是否将默认WordPress格式添加到外部SQL表中的数据?

我有许多外部SQL表,它们以我想要的方式包含数据,我想使用它们用短代码填充各种wordpress帖子。问题是我不明白wordpress如何在get\\u content()中“过滤”文本,以便添加正确的和。IOW:我有一个合适的WP贴子,我会在一个页面上显示内容,它会自动神奇地包含标签。如果我将该文本复制到外部表中,然后使用$result = $wpdb->get_col( \"SELECT my_text FROM my_songs WHERE id = \'\" . $song_id . \"\