As part of the WordPress 6.1 release, wpdb::prepare() has been updated so it can escape Identifiers (such as Table and Field names) with the %i placeholder (#52506).
This ensures these values are escaped correctly and don’t lead to SQL Injection Vulnerabilities.
$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' While this protects you against SQL Injection, where possible you should limit the values the user (attacker) can choose via an allow-list of trusted values; e.g.
$fields = array(
'name' => 'user_nicename',
'url' => 'user_url',
'created' => 'DATE(created)',
);
$sql .= ' ORDER BY ' . ($fields[$order_field] ?? 'user_login'); The change to add support for %i has a small performance improvement, as there is a little bit less Regular Expression work involved (generally the more parameters, the better the improvement).
WordPress is looking to use %i in core (#56091).
This change will help developers use the literal-string type for the $query parameter (this is where the $query is written as a developer defined string, and all user values are provided separately).
Props to @davidbaumwald for reviewing this dev note.
WordCamp US (WCUS) 2026 just wrapped up after 4 days at the Phoenix Convention Center in…
Each WordPress release celebrates an artist who has made an indelible mark on the world…
The official WordPress Browser Extension is now available for Google Chrome and Chromium-based browsers in…
WordPress 7.0.4 is now available WordPress 7.0.4 is now available which features a security fix.…
The full chat log is available beginning here on Slack. WordPress Performance Trac tickets @b1ink0…
WordPress 7.0.3 is now available WordPress 7.0.3 is now available which features several security fixes.…