ZF2 - \\Zend\\Db\\Adapter\\Platform::getQuoteIdent

2019-04-08 21:51发布

问题:

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.