onPHP/onphp-framework

Postgresql, разный эскейпинг в разных системах

Closed this issue · 3 comments

Возникла не ловящаяся бага, видимо, после начала использования Postgres 9.1. На разных системах по разному эскейпятся данные и подчас не корректно. Речь о функциях в PostgresDialect - pg_escape_string и pg_escape_bytea. Сталкивался ли кто-нибудь с подобным?

Если решение не найдется от чего зависит различное поведение этих функций, то, думаю возьмусь переписать PgSQL на использование PDO адаптера. Помимо этого попробую сделать все диалекты не синглтонами и что бы в их методы эскейпинга передовался текущий ресурс соединения для явного использования, т.к. например pg_escape_string на деле использует последний коннект к базе, но не явно.

Для чего нужно "сделать все диалекты не синглтонами" ? подразумевается что одновременно могут быть несколько диалектов одного класса но с разным состоянием?

Хочется на каждое DB по экземпляру диалекта, т.к. в общем случае может оказаться что есть два PgSQL, которые смотрят на базы разных версий.

Сделал легкий "компромисный вариант" патча для примера: https://github.com/AlexeyDsov/onphp-framework/compare/dialects

Тут диалекты все так же синглтоны, но при этом все DB при вызове getDialect теперь сетят себя в этот диалект. Так же часть DB методов перестают быть статическими.

Что вы думаете об этом?