WordPress.DB.PreparedSQL.NotPrepared
SQL query is not prepared
A database query includes dynamic data without using `$wpdb->prepare()` or an equivalent safe pattern.
Why It Shows Up
The scan found a SQL string passed to `$wpdb` where variables appear to be interpolated or concatenated directly.
Why It Matters
Unprepared SQL can allow SQL injection when user-controlled values reach the query.
How to Fix
- Move dynamic values into placeholders such as `%s`, `%d`, `%f`, or `%i` where supported.
- Pass the values as separate arguments to `$wpdb->prepare()`.
- For table names, column names, and sort directions, use strict allowlists instead of raw user input.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Added | Updated | Top Issue |
|---|---|---|---|---|---|---|---|---|
| #1601 | Wicked Folders – Folder Organizer for Pages, Posts, and Custom Post Types | 39 | 89 | 117 | 20k+ | Unsafe printing function | ||
| #1602 | WooCommerce Product Dependencies | 39 | 44 | 60 | 3k+ | Missing nonce verification | ||
| #1603 | WP Limit Login Attempts | 39 | 26 | 67 | 10k+ | Direct Query | ||
| #1604 | WP Most Popular | 39 | 50 | 35 | 2k+ | Output is not escaped | ||
| #1605 | SEO Auto Linker | 39 | 97 | 62 | 3k+ | Unsafe printing function | ||
| #1606 | Categories to Tags Converter | 39 | 86 | 38 | 50k+ | Output is not escaped | ||
| #1607 | YITH Custom Login | 39 | 86 | 33 | 6k+ | Output is not escaped | ||
| #1608 | 404 Notifier | 40 | 39 | 41 | 700 | Output is not escaped | ||
| #1609 | ACF Theme Code for Advanced Custom Fields | 40 | 478 | 40 | 10k+ | Output is not escaped | ||
| #1610 | ACF to Custom Database Tables | 40 | 36 | 64 | 600 | Nonce verification recommended | ||
| #1611 | Add & Replace Affiliate Links for Amazon | 40 | 39 | 52 | 600 | Output is not escaped | ||
| #1612 | Advanced Admin Search | 40 | 79 | 48 | 600 | Non Singular String Literal Text | ||
| #1613 | Allow Multiple Accounts | 40 | 115 | 19 | 9k+ | Non Singular String Literal Domain | ||
| #1614 | Alt Magic: AI Image Alt Text Generator for WP & Image Rename | 40 | 55 | 118 | 1k+ | Direct Query | ||
| #1615 | Atomic Edge Security – Firewall, Malware Scan and Login Security | 40 | 12 | 184 | 700 | Non-prefixed global variable | ||
| #1616 | AutoConvert Greeklish Permalinks | 40 | 116 | 13 | 30k+ | Text Domain Mismatch | ||
| #1617 | Broken Link Notifier | 40 | 11 | 193 | 1k+ | Non-prefixed global variable | ||
| #1618 | BuddyPress Profile Completion | 40 | 28 | 30 | 500 | Output is not escaped | ||
| #1619 | Bulk Delete Comments | 40 | 16 | 61 | 5k+ | Direct Query | ||
| #1620 | Coming soon Page | 40 | 24 | 18 | 500 | Text Domain Mismatch | ||
| #1621 | Copyscape Premium | 40 | 148 | 133 | 800 | SQL query is not prepared | ||
| #1622 | Country State City Dropdown CF7 | 40 | 35 | 54 | 5k+ | Direct Query | ||
| #1623 | Cron Logger | 40 | 49 | 36 | 1k+ | Output is not escaped | ||
| #1624 | Cryptocurrency Widgets Pack | 40 | 222 | 52 | 700 | Unsafe printing function | ||
| #1625 | Delete Me | 40 | 116 | 17 | 7k+ | Output is not escaped | ||
| #1626 | Easy Image Collage | 40 | 96 | 18 | 4k+ | Unsafe printing function | ||
| #1627 | Enhanced Custom Permalinks | 40 | 51 | 82 | 1k+ | Nonce verification recommended | ||
| #1628 | Eventer | 40 | 61 | 55 | 1k+ | Output is not escaped | ||
| #1629 | Expiring Posts | 40 | 52 | 20 | 900 | Missing Arg Domain | ||
| #1630 | FAQ Concertina | 40 | 43 | 16 | 700 | Output is not escaped | ||
| #1631 | GetPaid > Item Inventory | 40 | 112 | 52 | 400 | Text Domain Mismatch | ||
| #1632 | iNext Woo Pincode Checker | 40 | 36 | 82 | 700 | Missing nonce verification | ||
| #1633 | Internal Linking of Related Contents | 40 | 714 | 47 | 1k+ | Output is not escaped | ||
| #1634 | JSM Show Order Metadata for WooCommerce HPOS | 40 | 17 | 64 | 700 | Nonce verification recommended | ||
| #1635 | JSM Show Post Metadata | 40 | 15 | 66 | 10k+ | Nonce verification recommended | ||
| #1636 | JSM Show Term Metadata | 40 | 14 | 64 | 900 | Nonce verification recommended | ||
| #1637 | JSM Show User Metadata | 40 | 14 | 64 | 3k+ | Nonce verification recommended | ||
| #1638 | Links shortcode | 40 | 73 | 13 | 900 | Unsafe printing function | ||
| #1639 | LJ Multi Column Archive | 40 | 17 | 25 | 1k+ | Output is not escaped | ||
| #1640 | Logbook | 40 | 33 | 59 | 2k+ | Nonce verification recommended | ||
| #1641 | Mass Email To Users | 40 | 84 | 81 | 800 | Output is not escaped | ||
| #1642 | Multiple Featured Images | 40 | 50 | 22 | 5k+ | Output is not escaped | ||
| #1643 | NextGEN Gallery Sidebar Widget | 40 | 59 | 10 | 600 | Output is not escaped | ||
| #1644 | Paystack MemberPress | 40 | 71 | 76 | 400 | Output is not escaped | ||
| #1645 | Permalink Manager for WooCommerce | 40 | 115 | 20 | 8k+ | Short PHP open tag found | ||
| #1646 | Requirements Checklist | 40 | 200 | 22 | 900 | Output is not escaped | ||
| #1647 | Private Google Calendars | 40 | 227 | 37 | 1k+ | Output is not escaped | ||
| #1648 | Quiz Cat – WordPress Quiz Plugin | 40 | 151 | 69 | 4k+ | Output is not escaped | ||
| #1649 | Redirector | 40 | 48 | 32 | 7k+ | Output is not escaped | ||
| #1650 | REST API Custom Fields | 40 | 44 | 16 | 800 | Text Domain Mismatch |