ZF2 - \Zend\Db\Adapter\Platform::getQuoteIdentifierSymbol()

烈酒焚心 提交于 2019-12-06 02:47:49

问题


Code is as following, where I aim to use Pdo_mysql:

use \Zend\Db\Adapter\Adapter;
use \Zend\Db\Sql\Sql;
use \Zend\Db\Sql\Expression;    

$params = array(
    'driver'   => "Pdo_mysql",
    'host'     => &$this->Registry->config[ 'sql' ][ 'host' ],
    'username' => &$this->Registry->config[ 'sql' ][ 'user' ],
    'password' => &$this->Registry->config[ 'sql' ][ 'passwd' ],
    'dbname'   => &$this->Registry->config[ 'sql' ][ 'dbname' ]
);
$this->adapter  = new \Zend\Db\Adapter\Adapter( $params );
$this->platform = $this->adapter->getPlatform();
$this->sql      = new Sql( $this->adapter );

And when I check identifier-quote symbol with:

print $this->platform->getQuoteIdentifierSymbol();    // Output: "

As you can see, double quote is the symbol. This of course invalidates all MySQL queries of mine, since it quotes all identifier names (tables, columns etc) with double-quotes (") instead of forward-quote (`).

So, why PDO-MySQL driver uses Sql92 symbol instead? And how to fix that?


回答1:


The only solution to this problem was to create new \Zend\Db\Platform\Mysql object and pass it as second parameter to Adapter class when I initiate a connection. This question implies the automatic way of doing it. Why initializing MySQL adapter doesn't attach MySQL platform to it, is something I don't understand - instead it attaches SQL92 platform.




回答2:


Check the function setConnectionParameters() in Zend\Db\Adapter\Driver\Pdo\Connection

if $params['dsn'] is set the platform is taken from the text before ':'
Example:

$params['dsn'] = mysql:dbname=database;host=db.host.com
Platform name will be 'mysql'

Else, if $params['pdodriver'] is set the platform will be that value
Example:

$params['pdodriver'] = 'mysql'
Platform name will be 'mysql'

Else, if $params['driver'] is set the platform is taken from the text after 'Pdo_'
Example:

$params['driver'] = 'Pdo_Mysql'
Platform name will be 'mysql'

The platform name will decide the connection type an thus the correct quote identifier symbols



来源:https://stackoverflow.com/questions/15813544/zf2-zend-db-adapter-platformgetquoteidentifiersymbol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!