go-db
go-db copied to clipboard
autoreplace {} (Even if there is no prefix)
/* Замена {table} */
if($this->prefix) {
$query = \preg_replace_callback('~{(.*?)}~', array($this, 'tableClb'), $this->pattern);
}else{
$query=$this->pattern;
}
lifehack
Можете поподробнее описать?
В запросе конкатенируется фигурная скобка
SELECT CONCAT('{',123,":adsf",'}');
Ожидаю, что будет {123:adsf}
Однако фигурные скобки пропали
Начал рыть - понял, что пускай даже префикс не указан - автозамена по фигурным все равно осуществляется
и получается 123:adsf
@eliarhsamos, да, но если я пишу запрос SELECT * FROM {table}
я предполагаю, что будет вставлено имя таблицы, вне зависимо от того, как на верхнем уровне настроен префикс. А так замены не будет.
@vasa-c но в выше приведенном примере на казалось бы обычном запросе - фигурные пропадают. Как с этим штатными средствами бороться?
@eliarhsamos, понял. Как сказал @vasa-c, {table} должно разворачиваться вне зависимости от того установлен prefix или нет. Вижу пока только одно решение - не использовать фигурные скобки.
Если в CONCAT нет имен колонок то можно так
$db->query("SELECT CONCAT(?l)", array(array('{',123,":adsf",'}')));
Если же есть, то
$db->query("SELECT CONCAT(?, ?, ?c, ?)", array('{',123,":adsf",'}'));
@eliarhsamos ну а если там знак вопроса будет? Весь смысл библиотеки, как раз, чтобы сырых данных в шаблоне не было.
Вобще эти {}
древнее легаси, не знаю, пользуется ли кто, можно и убрать.
@mkedo видимо, да
@vasa-c знака вопроса там заведомо нет, нужно было создать json-подобный вариант
часть вещей уже под 5.7 mysql работают, часть нет
нужен стык
https://dev.mysql.com/doc/refman/5.7/en/json.html
и осуществляется что-то вроде
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
где данные уже через плейсхолдеры обрабатываются
а вот обертка подается напрямую