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

Posted

技术标签:

【中文标题】ZF2 - \\Zend\\Db\\Adapter\\Platform::getQuoteIdentifierSymbol()【英文标题】:ZF2 - \Zend\Db\Adapter\Platform::getQuoteIdentifierSymbol()ZF2 - \Zend\Db\Adapter\Platform::getQuoteIdentifierSymbol() 【发布时间】:2013-03-26 15:58:02 【问题描述】:

代码如下,我的目标是使用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 查询无效,因为它用双引号 (") 而不是正引号 (`) 引用所有标识符名称(表、列等)。

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

【问题讨论】:

为什么是“new Sql”语句,你应该准备和执行来自 $this->adapter 的查询 它们都有自己的用途,Ashley。 【参考方案1】:

此问题的唯一解决方案是创建新的 \Zend\Db\Platform\Mysql 对象,并在我启动连接时将其作为第二个参数传递给 Adapter 类。这个问题暗示了这样做的自动方式。为什么初始化 MySQL 适配器不附加 MySQL 平台,这是我不明白的 - 而是附加 SQL92 平台。

【讨论】:

我建议在 GitHub 上打开一个关于这个问题的问题。也许有些东西我们没有正确理解,但它肯定会在那里获得更好的关注!【参考方案2】:

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

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

$params['dsn'] = mysql:dbname=database;host=db.host.com 平台名称将是“mysql”

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

$params['pdodriver'] = 'mysql' 平台名称将是“mysql”

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

$params['driver'] = 'Pdo_Mysql' 平台名称将是“mysql”

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

【讨论】:

以上是关于ZF2 - \Zend\Db\Adapter\Platform::getQuoteIdentifierSymbol()的主要内容,如果未能解决你的问题,请参考以下文章

ZF2维护页面

ZF2:我在哪里存储 partialLoop 模板文件?

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

ZF2 - Doctrine ORM,简单表连接

ZF2 - 迭代 HydratingResultSet

ZF2 - 使用 Ajax 填充选择