Skip to content

Commit 90cff96

Browse files
authored
Merge pull request #9010 from kenjis/fix-qb-select-null-escape
fix: [QueryBuilder] `select()` does not escape after `NULL`
2 parents e7cb689 + 227f53a commit 90cff96

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

system/Database/BaseBuilder.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,8 +430,10 @@ public function select($select = '*', ?bool $escape = null)
430430
* This prevents NULL being escaped
431431
* @see https://github.com/codeigniter4/CodeIgniter4/issues/1169
432432
*/
433-
if (mb_stripos(trim($val), 'NULL') === 0) {
434-
$escape = false;
433+
if (mb_stripos($val, 'NULL') === 0) {
434+
$this->QBNoEscape[] = false;
435+
436+
continue;
435437
}
436438

437439
$this->QBNoEscape[] = $escape;

tests/system/Database/Builder/SelectTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,28 @@ public function testSelectWorksWithComplexSelects(): void
160160
$this->assertSame($expected, str_replace("\n", ' ', $builder->getCompiledSelect()));
161161
}
162162

163+
public function testSelectNullAsInString(): void
164+
{
165+
$builder = new BaseBuilder('users', $this->db);
166+
167+
$builder->select('NULL as field_alias, name');
168+
169+
$expected = 'SELECT NULL as field_alias, "name" FROM "users"';
170+
171+
$this->assertSame($expected, str_replace("\n", ' ', $builder->getCompiledSelect()));
172+
}
173+
174+
public function testSelectNullAsInArray(): void
175+
{
176+
$builder = new BaseBuilder('users', $this->db);
177+
178+
$builder->select(['NULL as field_alias', 'name']);
179+
180+
$expected = 'SELECT NULL as field_alias, "name" FROM "users"';
181+
182+
$this->assertSame($expected, str_replace("\n", ' ', $builder->getCompiledSelect()));
183+
}
184+
163185
/**
164186
* @see https://github.com/codeigniter4/CodeIgniter4/issues/4355
165187
*/

0 commit comments

Comments
 (0)