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 |
|---|---|---|---|---|---|---|---|---|
| #251 | Interactive Content – H5P | 23 | 565 | 380 | 40k+ | Non Singular String Literal Domain | ||
| #252 | Happy Addons for Elementor | 23 | 573 | 444 | 400k+ | Output is not escaped | ||
| #253 | Houzez Property Feed | 23 | 1,464 | 1,585 | 1k+ | Text Domain Mismatch | ||
| #254 | Hunk Companion | 23 | 2,547 | 687 | 6k+ | Text Domain Mismatch | ||
| #255 | Ibtana – Ecommerce Product Addons | 23 | 1,547 | 1,718 | 6k+ | Non Singular String Literal Domain | ||
| #256 | Payment forms, Buy now buttons, and Invoicing System | GetPaid | 23 | 389 | 1,266 | 5k+ | Non-prefixed global variable | ||
| #257 | IP Geo Block | 23 | 399 | 589 | 8k+ | Output is not escaped | ||
| #258 | Jeg Kit for Elementor – Powerful Addons for Elementor, Widgets & Templates for WordPress | 23 | 91 | 693 | 300k+ | Non-prefixed namespace | ||
| #259 | Joli FAQ SEO – WordPress FAQ Plugin | 23 | 1,083 | 1,526 | 700 | Non-prefixed global variable | ||
| #260 | Justified Gallery | 23 | 589 | 1,417 | 8k+ | Non-prefixed global variable | ||
| #261 | King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder | 23 | 1,834 | 3,877 | 10k+ | Non-prefixed global variable | ||
| #262 | Masteriyo LMS – LMS Course Builder, Quizzes & Certificates | 23 | 190 | 2,122 | 5k+ | Non-prefixed global variable | ||
| #263 | License Manager for WooCommerce | 23 | 129 | 797 | 6k+ | Nonce verification recommended | ||
| #264 | Like Button Rating ♥ LikeBtn | 23 | 1,231 | 617 | 4k+ | Unsafe printing function | ||
| #265 | Link Whisper Free | 23 | 3,882 | 5,303 | 30k+ | Text Domain Mismatch | ||
| #266 | LLMagnet – AI Visibility & AI SEO for Claude, ChatGPT & More | 23 | 627 | 1,798 | 300 | Non-prefixed global variable | ||
| #267 | Locatoraid Store Locator | 23 | 318 | 645 | 1k+ | Non-prefixed global variable | ||
| #268 | Login With Ajax – Fast Logins, 2FA, Redirects | 23 | 623 | 520 | 10k+ | Output is not escaped | ||
| #269 | Master Slider – Responsive Touch Slider | 23 | 800 | 408 | 60k+ | Output is not escaped | ||
| #270 | MasterStudy LMS WordPress Plugin – for Online Courses and Education | 23 | 1,419 | 4,875 | 10k+ | Non-prefixed global variable | ||
| #271 | Media Library Assistant | 23 | 1,144 | 3,943 | 70k+ | Nonce verification recommended | ||
| #272 | MediaPress | 23 | 904 | 583 | 4k+ | Output is not escaped | ||
| #273 | Moloni | 23 | 901 | 356 | 2k+ | Missing Arg Domain | ||
| #274 | MotoPress Appointment Booking | 23 | 2,362 | 857 | 2k+ | Text Domain Mismatch | ||
| #275 | Restaurant Menu and Food Ordering | 23 | 385 | 853 | 2k+ | Non-prefixed global variable | ||
| #276 | MP3 Audio Player – Music Player, Podcast Player & Radio by Sonaar | 23 | 4,065 | 488 | 20k+ | Text Domain Mismatch | ||
| #277 | MStore API – Create Native Android & iOS Apps On The Cloud | 23 | 618 | 764 | 3k+ | SQL query is not prepared | ||
| #278 | MultiParcels Shipping For WooCommerce | 23 | 196 | 362 | 4k+ | Mixed line endings | ||
| #279 | MPG – Multiple Page Generator, Bulk Landing Pages & Programmatic SEO | 23 | 485 | 580 | 2k+ | Missing nonce verification | ||
| #280 | Next Active Directory Integration | 23 | 683 | 284 | 2k+ | Exception output is not escaped | ||
| #281 | Photo Gallery, Sliders, Proofing and Themes – NextGEN Gallery | 23 | 2,129 | 993 | 400k+ | Text Domain Mismatch | ||
| #282 | Nirweb support | 23 | 254 | 617 | 800 | Request data is not unslashed | ||
| #283 | NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization | 23 | 316 | 639 | 100k+ | Output is not escaped | ||
| #284 | Issues and Series for Newspapers, Magazines, Publishers, Writers | 23 | 346 | 710 | 2k+ | Nonce verification recommended | ||
| #285 | Patchstack – WordPress & Plugins Security | 23 | 107 | 489 | 50k+ | Missing nonce verification | ||
| #286 | PayPal Brasil para WooCommerce | 23 | 554 | 328 | 1k+ | Unsafe printing function | ||
| #287 | Photo Gallery by 10Web – Mobile-Friendly Image Gallery | 23 | 4,159 | 1,553 | 100k+ | Output is not escaped | ||
| #288 | ExpressTechSoftwares Discord Add-on for Paid Memberships Pro | 23 | 454 | 449 | 700 | Text Domain Mismatch | ||
| #289 | AI Popup | 23 | 1,224 | 636 | 400 | Text Domain Mismatch | ||
| #290 | Post to Google My Business (Google Business Profile) | 23 | 845 | 1,452 | 10k+ | Non-prefixed global variable | ||
| #291 | Postie | 23 | 408 | 259 | 10k+ | Output is not escaped | ||
| #292 | PowerPress Podcasting plugin by Blubrry | 23 | 4,807 | 2,394 | 20k+ | Output is not escaped | ||
| #293 | Print Anywhere & Create PDFs of Order Receipts, Invoices, Labels & More. | 23 | 1,485 | 444 | 1k+ | Text Domain Mismatch | ||
| #294 | Product Watermark for WooCommerce | 23 | 696 | 457 | 2k+ | Output is not escaped | ||
| #295 | Radio Station by netmix® – Manage and play your Show Schedule in WordPress! | 23 | 934 | 3,619 | 1k+ | Non-prefixed global variable | ||
| #296 | Read More Without Refresh | 23 | 955 | 1,347 | 20k+ | Non-prefixed global variable | ||
| #297 | Redirection | 23 | 523 | 457 | 100k+ | Non-prefixed global variable | ||
| #298 | Request a Quote – Quote Forms for Any WordPress Site | 23 | 240 | 1,099 | 1k+ | Non-prefixed hook name | ||
| #299 | Robo Gallery – Photo & Image Slider | 23 | 1,291 | 530 | 40k+ | Output is not escaped | ||
| #300 | Schema | 23 | 1,173 | 245 | 40k+ | Text Domain Mismatch |