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 |
|---|---|---|---|---|---|---|---|---|
| #51 | SpeakOut! Email Petitions | 20 | 850 | 994 | 3k+ | Missing nonce verification | ||
| #52 | Events Manager – OpenStreetMaps | 20 | 559 | 444 | 700 | Output is not escaped | ||
| #53 | Razorpay for WooCommerce | 20 | 974 | 855 | 100k+ | Non-prefixed function | ||
| #54 | Premium Packages – Sell Digital Products Securely | 20 | 2,032 | 2,232 | 3k+ | Non-prefixed global variable | ||
| #55 | School Management System – WPSchoolPress | 20 | 353 | 5,275 | 1k+ | Non-prefixed global variable | ||
| #56 | Store Locator WordPress | 21 | 2,372 | 1,572 | 10k+ | Text Domain Mismatch | ||
| #57 | Backup Migration | 21 | 981 | 1,093 | 80k+ | Non-prefixed global variable | ||
| #58 | Forumax – AI Powered Advanced Community Forum Plugin | 21 | 4,936 | 4,357 | 600 | Text Domain Mismatch | ||
| #59 | bbPress | 21 | 929 | 3,672 | 100k+ | Non-prefixed function | ||
| #60 | Element Pack – Widgets, Templates & Addons for Elementor | 21 | 10,249 | 358 | 100k+ | Text Domain Mismatch | ||
| #61 | Pinpoint Booking System – Version 2 | 21 | 634 | 328 | 3k+ | Missing direct file access protection | ||
| #62 | Booking Ultra Pro Appointments Booking Calendar Plugin | 21 | 761 | 2,083 | 400 | Request data is not unslashed | ||
| #63 | CallTrackingMetrics | 21 | 923 | 286 | 3k+ | Unsafe printing function | ||
| #64 | SMS Extension for Contact Form 7 | 21 | 720 | 1,387 | 400 | Non-prefixed global variable | ||
| #65 | Cost Calculator Builder | 21 | 322 | 766 | 30k+ | Non-prefixed global variable | ||
| #66 | Daily Prayer Time | 21 | 947 | 1,780 | 1k+ | Non-prefixed global variable | ||
| #67 | DELUCKS SEO | 21 | 362 | 1,171 | 400 | Missing nonce verification | ||
| #68 | Free Downloads WooCommerce | 21 | 430 | 359 | 4k+ | Output is not escaped | ||
| #69 | Duplicator – Backups & Migration Plugin – Cloud Backups, Scheduled Backups, & More | 21 | 2,572 | 1,277 | 1m+ | Output is not escaped | ||
| #70 | Ebook Store | 21 | 666 | 1,087 | 700 | Non-prefixed global variable | ||
| #71 | EventPrime – Events Calendar, Bookings and Tickets | 21 | 872 | 4,301 | 7k+ | Non-prefixed global variable | ||
| #72 | Feeds for YouTube (YouTube video, channel, and gallery plugin) | 21 | 558 | 978 | 100k+ | Output is not escaped | ||
| #73 | Front End Users | 21 | 719 | 2,759 | 400 | Non-prefixed global variable | ||
| #74 | Frontend Dashboard | 21 | 384 | 945 | 500 | Non-prefixed function | ||
| #75 | If-So Dynamic Content – Elementor & All Page Builders Personalization | 21 | 889 | 725 | 7k+ | Unsafe printing function | ||
| #76 | Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF | 21 | 426 | 862 | 1m+ | Non-prefixed global variable | ||
| #77 | Leyka | 21 | 257 | 3,446 | 2k+ | Request data is not unslashed | ||
| #78 | MailChimp Subscribe Form, Optin Builder, PopUp Builder, Form Builder | 21 | 1,133 | 3,011 | 2k+ | Non-prefixed global variable | ||
| #79 | Mergado Pack | 21 | 2,323 | 588 | 700 | Output is not escaped | ||
| #80 | Modular DS: Monitor, update, and backup multiple websites | 21 | 159 | 81 | 40k+ | Exception output is not escaped | ||
| #81 | Mooberry Book Manager | 21 | 1,040 | 399 | 1k+ | Text Domain Mismatch | ||
| #82 | MotoPress Hotel Booking | 21 | 3,067 | 1,037 | 10k+ | Text Domain Mismatch | ||
| #83 | Points Management System For Gamification, Ranks, Badges, and Loyalty Rewards Program – myCred | 21 | 1,478 | 3,337 | 10k+ | Non-prefixed global variable | ||
| #84 | Oasis Workflow | 21 | 775 | 575 | 700 | Text Domain Mismatch | ||
| #85 | Landing Page Builder – Coming Soon page, Maintenance Mode, Lead Page, WordPress Landing Pages | 21 | 1,173 | 2,983 | 9k+ | Non-prefixed global variable | ||
| #86 | Paid Membership Subscriptions – Effortless Memberships, Recurring Payments & Content Restriction | 21 | 1,934 | 5,248 | 10k+ | Non-prefixed hook name | ||
| #87 | User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor | 21 | 701 | 1,465 | 50k+ | Missing Translators Comment | ||
| #88 | PublishPress Planner – Editorial Calendar, Marketing Content, Kanban Board | 21 | 603 | 890 | 6k+ | Output is not escaped | ||
| #89 | Razorpay for Gravity Forms | 21 | 411 | 47 | 600 | Exception output is not escaped | ||
| #90 | Five Star Restaurant Reservations – WordPress Booking Plugin | 21 | 1,099 | 1,147 | 10k+ | Output is not escaped | ||
| #91 | Seamless Donations is Sunset | 21 | 600 | 514 | 2k+ | Text Domain Mismatch | ||
| #92 | Professional Social Sharing Buttons, Icons & Related Posts – Shareaholic | 21 | 327 | 181 | 10k+ | Output is not escaped | ||
| #93 | Smart Forms – when you need more than just a contact form | 21 | 776 | 574 | 5k+ | Output is not escaped | ||
| #94 | ThirstyAffiliates – Affiliate Links, Link Branding, Link Tracking & Marketing Plugin | 21 | 190 | 660 | 30k+ | Non-prefixed global variable | ||
| #95 | UPC/EAN/GTIN Barcode Generator/Importer | 21 | 776 | 311 | 500 | Exception output is not escaped | ||
| #96 | Buckaroo Woocommerce Payments Plugin | 21 | 584 | 326 | 2k+ | Exception output is not escaped | ||
| #97 | WebP Express | 21 | 160 | 427 | 300k+ | Non-prefixed global variable | ||
| #98 | Wise Chat | 21 | 470 | 506 | 5k+ | Output is not escaped | ||
| #99 | Paysera Payment Gateway for WooCommerce | 21 | 1,866 | 195 | 7k+ | Exception output is not escaped | ||
| #100 | Pay For Post with WooCommerce | 21 | 960 | 1,474 | 1k+ | Non-prefixed global variable |