WordPress.DB.PreparedSQL.InterpolatedNotPrepared
Interpolated SQL is not prepared
Variables are interpolated into a SQL string before the query is prepared.
Why It Shows Up
The scan found dynamic values placed directly inside SQL, often through string interpolation, before `$wpdb->prepare()` can safely bind them.
Why It Matters
Preparing a query after unsafe interpolation does not reliably protect the dynamic value.
How to Fix
- Replace interpolated variables with placeholders.
- Pass each dynamic value as a separate `$wpdb->prepare()` argument.
- Use allowlists for SQL identifiers and directions that cannot be represented as normal values.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Added | Updated | Top Issue |
|---|---|---|---|---|---|---|---|---|
| #951 | Reviews Plus | 33 | 223 | 378 | 1k+ | Non-prefixed function | ||
| #952 | Schema & Structured Data for WP & AMP | 33 | 63 | 246 | 100k+ | Non-prefixed global variable | ||
| #953 | SMTP2GO for WordPress – Email Made Easy | 33 | 186 | 111 | 30k+ | Output is not escaped | ||
| #954 | Social Rocket – Social Sharing Plugin | 33 | 1,016 | 255 | 1k+ | Unsafe printing function | ||
| #955 | Spin Wheel – Interactive spinning wheel that offers coupons | 33 | 680 | 313 | 500 | Unsafe printing function | ||
| #956 | Simple Sticky Add To Cart For WooCommerce | 33 | 401 | 70 | 900 | Text Domain Mismatch | ||
| #957 | Sublanguage | 33 | 266 | 287 | 700 | Output is not escaped | ||
| #958 | Uix Shortcodes | 33 | 246 | 444 | 400 | Non-prefixed global variable | ||
| #959 | Website Monetization by MageNet | 33 | 60 | 87 | 20k+ | Output is not escaped | ||
| #960 | Rich Showcase for Google Reviews | 33 | 213 | 278 | 100k+ | Output is not escaped | ||
| #961 | Wonder Slider Lite | 33 | 273 | 187 | 8k+ | Output is not escaped | ||
| #962 | Product Addons for Woocommerce – Product Options with Custom Fields | 33 | 124 | 114 | 30k+ | Output is not escaped | ||
| #963 | CartBounty – Save and recover abandoned carts for WooCommerce | 33 | 370 | 399 | 10k+ | Output is not escaped | ||
| #964 | Pay. Payment Methods for WooCommerce | 33 | 318 | 104 | 3k+ | Non Singular String Literal Domain | ||
| #965 | WOW Slider | 33 | 176 | 101 | 3k+ | Output is not escaped | ||
| #966 | Books Gallery – Book Showcase, Library & Affiliate Plugin | 33 | 1,753 | 178 | 2k+ | Output is not escaped | ||
| #967 | WP Edit | 33 | 337 | 137 | 40k+ | Unsafe printing function | ||
| #968 | Connector for Gravity Forms and Google Sheets | 33 | 692 | 155 | 3k+ | Text Domain Mismatch | ||
| #969 | WP Multilang – Translation and Multilingual Plugin | 33 | 53 | 118 | 10k+ | Database parameter is not escaped | ||
| #970 | Paymattic – Secure, Simple Payment & Donation with Subscription Payments, Recurring Donations, Customer Management | 33 | 538 | 3k+ | Direct Query | |||
| #971 | WP-UserOnline | 33 | 111 | 161 | 10k+ | Output is not escaped | ||
| #972 | WPReplace内容字符替换插件 | 33 | 209 | 195 | 800 | Non Singular String Literal Domain | ||
| #973 | XML Sitemaps | 33 | 65 | 62 | 2k+ | Output is not escaped | ||
| #974 | Assistant – Every Day Productivity Apps | 34 | 124 | 97 | 4k+ | Exception output is not escaped | ||
| #975 | Audit Trail | 34 | 90 | 107 | 10k+ | Unsafe printing function | ||
| #976 | Automatic YouTube Gallery – Embed Auto-Updating YouTube Video Galleries, Feeds, Playlists & Channels | 34 | 86 | 255 | 9k+ | Direct Query | ||
| #977 | Bayarcash WooCommerce | 34 | 148 | 138 | 700 | Non Singular String Literal Domain | ||
| #978 | Buckets | 34 | 68 | 76 | 500 | Output is not escaped | ||
| #979 | Cornerstone | 34 | 161 | 174 | 30k+ | Nonce verification recommended | ||
| #980 | CSS JS Manager, Async JavaScript, Defer Render Blocking CSS | 34 | 76 | 106 | 1k+ | Input is not validated | ||
| #981 | Debug Log Manager Tool | 34 | 44 | 143 | 3k+ | Nonce verification recommended | ||
| #982 | Download After Email – Subscribe & Download Form Plugin | 34 | 22 | 356 | 7k+ | Input is not validated | ||
| #983 | Dr. Flex | 34 | 83 | 51 | 1k+ | Output is not escaped | ||
| #984 | Easy Social Sharing | 34 | 16 | 240 | 1k+ | Non-prefixed global variable | ||
| #985 | Einsatzverwaltung | 34 | 152 | 128 | 1k+ | Output is not escaped | ||
| #986 | ePayco Plugin for WooCommerce | 34 | 155 | 136 | 3k+ | Text Domain Mismatch | ||
| #987 | Flash Toolkit | 34 | 158 | 242 | 10k+ | Non-prefixed global variable | ||
| #988 | Floating Side Tab | 34 | 94 | 153 | 600 | Non-prefixed global variable | ||
| #989 | FluentAuth – The Ultimate Authorization & Security Plugin for WordPress | 34 | 44 | 229 | 10k+ | Nonce verification recommended | ||
| #990 | Geliver Akıllı Kargo Pazaryeri | 34 | 49 | 247 | 400 | Non-prefixed global variable | ||
| #991 | APG Google Video Sitemap Feed | 34 | 96 | 45 | 800 | Output is not escaped | ||
| #992 | Gratisfaction- Loyalty, Rewards , Referral, Birthday and Giveaway Program | 34 | 131 | 352 | 600 | Missing nonce verification | ||
| #993 | Signature Add-On for Gravity Forms | 34 | 161 | 48 | 1k+ | Text Domain Mismatch | ||
| #994 | HollerBox — Fast & Effective Popups & Lead-Generation | 34 | 78 | 92 | 2k+ | Output is not escaped | ||
| #995 | Inavii Social Feed – Live Social Proof Gallery | 34 | 532 | 180 | 9k+ | Text Domain Mismatch | ||
| #996 | Lenix Leads Collector | 34 | 414 | 242 | 10k+ | Text Domain Mismatch | ||
| #997 | Login with Vipps and MobilePay | 34 | 263 | 174 | 900 | Output is not escaped | ||
| #998 | Mass Ping Tool for SEO – WordPress ping list to get indexed faster on Google, Yandex, … | 34 | 77 | 96 | 400 | Output is not escaped | ||
| #999 | Montonio for WooCommerce | 34 | 44 | 257 | 10k+ | Non-prefixed global variable | ||
| #1000 | Multi Step Form | 34 | 277 | 136 | 9k+ | Output is not escaped |