getDb()->createCommand - заменяет фигурную скобку на обратную ковычку

Достаточно нестандартная проблема, хочу записать строку такого вида "... {\frac{{5}} ..." в базу, построитель запросов заменяет некоторые скобки на ` (обратная ковычка)

$query = "UPDATE table SET text = (CASE id  WHEN 123 THEN '<p><p>{\frac{{5}}{x}}}$$.</p></p>'  END) WHERE id IN(123)";
$raw = Task::getDb()->createCommand($upQuery)->getRawSql();

На выходе в $raw лежит это, ( обращаем внимание на фрагмент \frac{5} )

UPDATE table SET text = (CASE id  WHEN 123 THEN '<p><p>{\frac{`5`}{x}}}$$.</p></p>'  END) WHERE id IN(123)

Как это обойти? Нужно как-то экранировать скобки?


Ответы (2 шт):

Автор решения: abakan

Можно дернуть напрямую, тогда улетит чистый raw sql в базу. Но это небезопасно как я понял

Model::getDb()->getMasterPdo()->exec($query);

→ Ссылка
Автор решения: phpBear
use yii\db\Expression;

$query = "UPDATE table 
          SET text = (CASE id  
                      WHEN 123 THEN '".new Expression('<p><p>{\frac{{5}}{x}}}$$.</p></p>')."'  
                      END) 
          WHERE id IN(123)";

Из мануала [https://www.yiiframework.com/doc/api/2.0/yii-db-expression]

Expression represents a DB expression that does not need escaping or quoting.

→ Ссылка