WordPress-Coding-Standards
WordPress-Coding-Standards copied to clipboard
Add support for `INSERT INTO ... VALUES ...` syntax in SQL queries
trafficstars
Bug Description
Prepared SQL queries with INSERT INTO ... VALUES ... filled with the correct number of placeholders using the syntax commonly used for queries with IN(...) clauses (implode() + array_fill()) emit a warning.
Minimal Code Snippet
The issue happens when running this command:
phpcs --standard=WordPress -s testfile.php
... over a file containing this code:
$all_relationships = array(
array( 1, 1 ),
array( 1, 2 ),
array( 1, 3 ),
);
$wpdb->query(
$wpdb->prepare(
sprintf(
"INSERT INTO {$wpdb->term_relationships} (object_id, term_taxonomy_id) VALUES %s",
implode( ',', array_fill( 0, count( $all_relationships ), '(%d,%d)' ) )
),
array_merge( ...$all_relationships )
)
);
Error Code
Incorrect number of replacements passed to $wpdb->prepare().
Found 1 replacement parameters, expected 0.
(WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber)
Environment
| Question | Answer |
|---|---|
| PHP version | 8.0.28 |
| PHP_CodeSniffer version | 3.10.3 |
| WordPressCS version | 3.1.0 |
| PHPCSUtils version | 1.0.12 |
| PHPCSExtra version | 1.2.1 |
| WordPressCS install type | Composer project local |
Additional Context (optional)
Tested Against develop Branch?
- [ ] I have verified the issue still exists in the
developbranch of WordPressCS.
Isn't this syntax deprecated https://dev.mysql.com/worklog/task/?id=13325 ?