From 50b19dbfba5b282bbab9fdd4ca01d6a8744ca6d4 Mon Sep 17 00:00:00 2001 From: Alex <1797626+alex-code@users.noreply.github.com> Date: Fri, 20 Mar 2020 16:15:16 +0000 Subject: [PATCH] Fix #17920: Fix for `Command::getRawSql` and `Expression` in params --- framework/CHANGELOG.md | 1 + framework/db/Command.php | 6 +++--- tests/framework/db/CommandTest.php | 7 ++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 5fdd1f2..9ce1146 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -24,6 +24,7 @@ Yii Framework 2 Change Log - Bug #17884: Fix 0 values in console Table rendered as empty string (mikehaertl) - Bug #13749: Fix Yii opens db connection even when hits query cache (shushenghong) - Bug #17909: Reset DB schema, transaction, and driver name when the connection is closed (brandonkelly) +- Bug #17920: Fix for `Command::getRawSql` and `Expression` in params (alex-code) 2.0.32 January 21, 2020 ----------------------- diff --git a/framework/db/Command.php b/framework/db/Command.php index 17f7ba6..9618ea6 100644 --- a/framework/db/Command.php +++ b/framework/db/Command.php @@ -206,13 +206,13 @@ class Command extends Component if (is_string($name) && strncmp(':', $name, 1)) { $name = ':' . $name; } - if (is_string($value)) { - $params[$name] = $this->db->quoteValue($value); + if (is_string($value) || $value instanceof Expression) { + $params[$name] = $this->db->quoteValue((string)$value); } elseif (is_bool($value)) { $params[$name] = ($value ? 'TRUE' : 'FALSE'); } elseif ($value === null) { $params[$name] = 'NULL'; - } elseif ((!is_object($value) && !is_resource($value)) || $value instanceof Expression) { + } elseif (!is_object($value) && !is_resource($value)) { $params[$name] = $value; } } diff --git a/tests/framework/db/CommandTest.php b/tests/framework/db/CommandTest.php index 81cabed..9573284 100644 --- a/tests/framework/db/CommandTest.php +++ b/tests/framework/db/CommandTest.php @@ -1357,8 +1357,13 @@ SQL; [ 'SELECT * FROM customer WHERE id IN (:ids)', [':ids' => new Expression(implode(', ', [1, 2]))], - 'SELECT * FROM customer WHERE id IN (1, 2)', + 'SELECT * FROM customer WHERE id IN (\'1, 2\')', ], + [ + 'SELECT NOW() = :now', + [':now' => new Expression('NOW()')], + 'SELECT NOW() = \'NOW()\'', + ] ]; }