Answers:
以下是wpdb类的警告。
https://codex.wordpress.org/Class_Reference/wpdb
一个警告
此类中的某些函数将SQL语句作为输入。您必须对SQL合并到SQL查询中的所有不受信任的值进行SQL转义,以防止SQL注入攻击。检查文档,以了解您打算使用的函数是为您自己转义了SQL还是希望它已被预转义。
因此,我将其读为-wpdb类不会自动为您准备或转义数据。
我非常确定,如果您不能100%信任代码中的数据源,那么建议您使用prepare类(?)。
不要认为使用prepare类会在未正确使用prepare类的情况下对其进行修复。我对此很陌生,所以如果我不正确,请发表任何更正作为答复。
$ wpdb-> prepare(“ SELECT * FROM table WHERE ID =%d AND name =%s”,$ id,$ name);
在上面的语句中,有2个额外的属性。一个用于ID,一个用于名称。据我阅读,每一个都对应于您查询中的项目数。另外,%s =字符串,%d =整数,%f =浮点数。
另外,根据我的阅读,如果您不添加额外的属性,那么prepare实际上将无济于事。会有警告,但是如果您将其关闭,也许您将不会知道。
这是来自类引用本身的示例,其中他们在下面的INSERT中添加了prepare类。
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$ wpdb-> query($ wpdb-> prepare(“插入$ wpdb-> postmeta(post_id,meta_key,meta_value)VALUES(%d,%s,%s)”,array(10,$ metakey,$ metavalue) ));
我担心的是,根据“没人”引用的同一页面,被投票的答案是错误的。我假设您使用的是prepare(),但未使用其他标准的php逃逸方法,因为我也认为这个答案是正确的……直到我更深入地研究为止。
无论如何...也许自原始答案以来情况已经发生了变化。
$wpdb->insert()
$ wpdb-> update()之类的函数或$wpdb->delete()
数据应为RAW时。在使用eg $wpdb->query()
并将SQL语句作为输入传递的情况下,应转义不受信任的数据。
不,使用时不需要防止SQL注入-wpdb插入或wpdb删除。
请参阅以下链接:
https://codex.wordpress.org/Data_Validation#数据库
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
insert
与update
不需要这样。但应与结合使用query
。