5

コードは次のとおりです。ここで、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 シンボルを使用するのでしょうか? そして、それを修正する方法は?

4

2 に答える 2

1

この問題の唯一の解決策は、新しい \Zend\Db\Platform\Mysql オブジェクトを作成し、接続を開始するときにそれを Adapter クラスの 2 番目のパラメータとして渡すことでした。この質問は、それを自動的に行う方法を意味します。なぜ MySQL アダプターを初期化しても MySQL プラットフォームが接続されないのか、私には理解できません。代わりに、SQL92 プラットフォームが接続されます。

于 2013-04-09T06:36:30.917 に答える
0

Zend\Db\Adapter\Driver\Pdo\Connection の関数 setConnectionParameters() を確認してください

$params['dsn'] が設定されている場合、プラットフォームは「:」の前のテキストから取得されます。
例:

$params['dsn'] = mysql:dbname=データベース;host=db.host.com
プラットフォーム名は「mysql」になります

それ以外の場合、 $params['pdodriver'] が設定されている場合、プラットフォームはその値になります
例:

$params['pdodriver'] = 'mysql'
プラットフォーム名は「mysql」になります

それ以外の場合、$params['driver'] が設定されている場合、プラットフォームは「Pdo_」の後のテキストから取得されます。
例:

$params['driver'] = 'Pdo_Mysql'
プラットフォーム名は「mysql」になります

プラットフォーム名は接続タイプを決定するため、正しい引用識別子シンボル

于 2019-10-24T11:57:32.610 に答える