作为 WordPress 6.1 版本的一部分, wpdb::prepare()
已更新,因此它可以使用%i
占位符 转义标识符(例如表和字段名称)。
这可确保这些值被正确转义并且不会导致 SQL 注入漏洞。
例子
$table = 'my_table';
$field = 'my_field';
$value = 'my_value';
$wpdb->prepare('SELECT * FROM %i WHERE %i = %s', $table, $field, $value);
// Output:
// SELECT * FROM `my_table` WHERE `my_field` = 'my_value'
虽然这可以保护您免受 SQL 注入,但您应该尽可能限制用户(攻击者)可以通过可信值的允许列表选择的值;例如
$fields = array(
'name' => 'user_nicename',
'url' => 'user_url',
'created' => 'DATE(created)',
);
$sql .= ' ORDER BY ' . ($fields[$order_field] ?? 'user_login');
性能改进
添加对 %i 的支持的更改具有较小的性能改进,因为涉及的正则表达式工作少了一点(通常参数越多,改进越好)。
在将来
WordPress 正在寻求在核心中使用 %i。
此更改将帮助开发人员使用参数的literal-string
类型$query
(这$query
是编写为开发人员定义的字符串的地方,并且所有用户值都单独提供)。