CodeIgniter: SQL injection in Query Builder deleteBatch() when used with where() conditions
Critical severity
GitHub Reviewed
Published
Jul 7, 2026
in
codeigniter4/CodeIgniter4
•
Updated Aug 7, 2026
Package
Affected versions
>= 4.3.0, < 4.7.4
Patched versions
4.7.4
Description
Published by the National Vulnerability Database
Jul 31, 2026
Published to the GitHub Advisory Database
Aug 7, 2026
Reviewed
Aug 7, 2026
Last updated
Aug 7, 2026
Impact
A SQL injection vulnerability exists in the Query Builder's
deleteBatch()method. WhendeleteBatch()is used together withwhere()conditions, the bound values from theWHEREclause are substituted directly into the generated SQL with their escape flag ignored, so they are never escaped or quoted. If an application passes user-controlled input towhere()before callingdeleteBatch(), that input is interpreted as SQL rather than as a value, allowing SQL injection.This affects only the
deleteBatch()code path. Regulardelete()operations escapewhere()binds correctly.Patches
Upgrade to v4.7.4 or later.
Workarounds
If you cannot upgrade immediately:
where()when usingdeleteBatch().delete()with Query Builder binds instead ofdeleteBatch().onConstraint()rather than as separate user-controlledwhere()clauses.References