[英]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.