我相信这是一个简单的疏忽,但我似乎无法缩小范围:
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
最合适的回答,由SO网友:s_ha_dum 整理而成
不使用$wpdb->prepare
具有表名称。prepare
将引用将导致错误SQL的表名。
这也是不必要的开销。您的表名不应该是用户提供的数据,在您的情况下也不应该是用户提供的数据。你没有必要逃避它。”“准备”用于用户提供的数据,例如表单或$_GET
参数
您没有用户提供的数据,所以只需要
$wpdb->get_results("SELECT * FROM {$tablename}");