Я использую Zend Framework 2 для разработки приложений. Все приложение основано на базе данных IBM Informix.
Конфигурация базы данных выглядит примерно так:
return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => 'dsn:connection:string', 'driver_options' => array( ), ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), ), );
При запросе базы данных путем создания экземпляра объекта Zend \ Db \ Sql \ Select запросы всегда цитируются, что не должно происходить, потому что Informix больше не может обрабатывать запрос.
Ожидаемая последовательность:
SELECT column1, column2 FROM table
Zend-generated Querystring:
SELECT "column1", "column2" from "table"
После некоторых исследований я обнаружил подобные случаи, но ни одно решение не было приемлемым. Проблема здесь в том, что мне нужно передать объект Zend \ Db \ Sql \ Select, поэтому запрос к базе данных с необработанным sql через запрос $ dbAdapter-> ($ sql) невозможен.
Может быть, есть способ отключить цитату (например, в конфигурации базы данных)?
Некоторые подсказки будут очень оценены. заранее спасибо
вы можете отключить идентификаторы цитирования. как это
use Zend\Db\Adapter\Adapter as DbAdapter; // DB2 Connection $adapter = new DbAdapter(array( 'driver' => 'IbmDb2', 'database' => '*LOCAL', 'username' => '', 'password' => '', 'driver_options' => array( 'i5_naming' => DB2_I5_NAMING_ON, 'i5_libl' => 'LIB1 LIB2 LIB3' ), 'platform_options' => array('quote_identifiers' => false) );
взятых из документации Zend Framework.
Если вы хотите, чтобы Informix распознал эту нотацию, вам нужно установить переменную среды DELIMIDENT, чтобы сервер знал, что для этих строк с двойными кавычками будут использоваться идентификаторы, а не как строки.
Существует множество способов сделать это; что лучше всего зависит от вашей системы. Похоже, вы используете Windows, а не Unix. Существует утилита SETNET32, которая может устанавливать переменную окружения. В Unix (не уверен в Windows) вы можете добавить DELIMIDENT 1
в $HOME/.informix
или в $INFORMIXDIR/etc/informixrc
(обычный, но он должен работать). Вы можете установить env var по shell; вы можете указать его как атрибут соединения.
Windows не является моей областью знаний.