簡體   English   中英

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

[英]ZF2 - \Zend\Db\Adapter\Platform::getQuoteIdentifierSymbol()

代碼如下,我打算使用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符號? 以及如何解決?

解決此問題的唯一方法是創建一個新的\\ Zend \\ Db \\ Platform \\ Mysql對象,並在啟動連接時將其作為第二個參數傳遞給Adapter類。 這個問題意味着自動的方式。 為什么不初始化MySQL適配器不附加MySQL平台,這是我不了解的-而是附加了SQL92平台。

檢查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'

平台名稱將決定連接類型,從而確定正確的引號標識符符號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM