Should I use wpdb prepare?

时间:2011-05-11 作者:Richard Sweeney

我是SQL新手,不知道是否需要使用wpdb->prepare 对于以下对我创建的表的查询

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = "SELECT * FROM " . $tablename . " ORDER BY date_created DESC";
$resulst = $wpdb->get_results( $sql , ARRAY_A );
我需要使用prepare 在这里我该怎么做?

干杯

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

始终使用prepare 但它的主要用途是防止SQL注入攻击,而且由于没有来自用户/访问者的输入,或者他们无法影响查询,因此在当前示例中这不是问题。

但正如我之前所说的,使用它是最佳实践,一旦你开始使用它,你就不会停止,因此在你的示例中,你可以这样使用它:

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM %s ORDER BY date_created DESC",$tablename );
$results = $wpdb->get_results( $sql , ARRAY_A );
阅读更多有关如何使用它的信息the codex

SO网友:SaschArt

在你的情况下是不可能的SQL injection attack. 您的代码不需要额外的保护,因为不使用用户输入,例如:post、get、request、cookie。

当不需要节省服务器资源时,不要使用复杂的功能。

SO网友:softnwords

使用prepare时,它可以保护代码免受SQL注入漏洞的影响。

以下是使用时需要修改的代码prepare();

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM {$tablename} ORDER BY date_created DESC");
$resulst = $wpdb->get_results( $sql , ARRAY_A );

结束

相关推荐

通过自定义分类从MySQL表返回信息

Update: 我现在正试图找到一种方法来响应自定义分类法值的元数据。我正在尝试创建一些PHP,以便在将在侧边栏中显示信息的纯文本小部件中使用。因为有些信息在站点的某些部分是相同的,而不是存储在自定义字段中,所以我尝试将其存储在MYSQL表中。我希望代码能够识别post分类法,查找表中的id字段,找到与分类法共享id的行,然后回显该行上其他字段的值。我有自己的分类设置和表格,但我找不到多少先例,因此我很难知道从哪里开始。到目前为止,我试图调用当前post分类法的值,但我无法让它在循环之外工作<?ph