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

时间:2013-04-04 14:05:40

标签: php pdo zend-framework2 symbols identifier

代码如下,我的目标是使用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 );

当我用:

检查标识符引用符号时
print $this->platform->getQuoteIdentifierSymbol();    // Output: "

如您所见,双引号是符号。这当然使我的所有MySQL查询无效,因为它用双引号(“)而不是forward-quote(`)引用所有标识符名称(表,列等)。

那么,为什么PDO-MySQL驱动程序使用Sql92符号呢?以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

解决此问题的唯一方法是创建新的\ Zend \ Db \ Platform \ Mysql对象,并在启动连接时将其作为第二个参数传递给Adapter类。这个问题意味着自动的方式。为什么初始化MySQL适配器不会将MySQL平台附加到它上面,这是我不理解的 - 而是它附加了SQL92平台。

答案 1 :(得分:0)

检查Zend \ Db \ Adapter \ Driver \ Pdo \ Connection中的函数setConnectionParameters()

如果设置了$ params ['dsn'],则平台取自':'
之前的文本 示例:

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

否则,如果设置了$ params ['pdodriver']平台将是该值
示例:

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

否则,如果设置了$ params ['driver'],则平台取自'Pdo_'之后的文本。
示例:

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

平台名称将决定连接类型,从而确定正确的引号标识符符号