Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

autoreplace {} (Even if there is no prefix) #58

Open
eliarhsamos opened this issue May 18, 2016 · 7 comments
Open

autoreplace {} (Even if there is no prefix) #58

eliarhsamos opened this issue May 18, 2016 · 7 comments

Comments

@eliarhsamos
Copy link

/* Замена {table} */
        if($this->prefix) {
            $query = \preg_replace_callback('~{(.*?)}~', array($this, 'tableClb'), $this->pattern);
        }else{
            $query=$this->pattern;
        }

lifehack

@mkedo
Copy link
Contributor

mkedo commented May 30, 2016

Можете поподробнее описать?

@eliarhsamos
Copy link
Author

В запросе конкатенируется фигурная скобка
SELECT CONCAT('{',123,":adsf",'}');
Ожидаю, что будет {123:adsf}
Однако фигурные скобки пропали
Начал рыть - понял, что пускай даже префикс не указан - автозамена по фигурным все равно осуществляется
и получается 123:adsf

@vasa-c
Copy link
Owner

vasa-c commented May 30, 2016

@eliarhsamos, да, но если я пишу запрос SELECT * FROM {table} я предполагаю, что будет вставлено имя таблицы, вне зависимо от того, как на верхнем уровне настроен префикс. А так замены не будет.

@eliarhsamos
Copy link
Author

@vasa-c но в выше приведенном примере на казалось бы обычном запросе - фигурные пропадают. Как с этим штатными средствами бороться?

@mkedo
Copy link
Contributor

mkedo commented May 30, 2016

@eliarhsamos, понял. Как сказал @vasa-c, {table} должно разворачиваться вне зависимости от того установлен prefix или нет.
Вижу пока только одно решение - не использовать фигурные скобки.

Если в CONCAT нет имен колонок то можно так
$db->query("SELECT CONCAT(?l)", array(array('{',123,":adsf",'}')));
Если же есть, то
$db->query("SELECT CONCAT(?, ?, ?c, ?)", array('{',123,":adsf",'}'));

@vasa-c
Copy link
Owner

vasa-c commented May 30, 2016

@eliarhsamos ну а если там знак вопроса будет? Весь смысл библиотеки, как раз, чтобы сырых данных в шаблоне не было.

Вобще эти {} древнее легаси, не знаю, пользуется ли кто, можно и убрать.

@eliarhsamos
Copy link
Author

@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"}');
где данные уже через плейсхолдеры обрабатываются
а вот обертка подается напрямую

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants