はい、odbc を使用して接続できます。現在公式にはサポートされていませんが、最小限の変更でかなり簡単に動作させることができます。
最初に行う必要があるのは、基本的な PHP PDO 関数を使用して接続できることを確認することです。したがって、次のようにします。
$resource = new PDO('odbc:driver=FreeTDS;dbname=MYDB;Server=127.0.0.1;Port=8090;UID=Testuser;PWD=testpass;', 'Testuser', 'testpass', array());
$s = $resource->prepare('SELECT * FROM TEST_TABLE');
$r=$s->execute();
var_dump($r);
設定のためにホスト、ポート、ユーザー、パス、テーブル名などを変更する必要がありますが、これを使用してそれらの詳細が正しいことを確認できます。接続するために何をしているのかがわかったら、次のように Zend でアクセスできます。
$configArray = array(
'driver' => 'pdo_odbc',
'driver_options' => array('driver' => 'FreeTDS'),
'platform' => 'Mssql',
'dbname' => 'MYDB',
'host' => '127.0.0.1',
'port' => 8090,
'user' => 'Testuser',
'pass' => 'testpass'
);
$adapter = new Zend\Db\Adapter\Adapter($configArray);
$q = new Zend\Db\Sql\Select();
$q->from('TEST_TABLE');
$sql = $q->getSqlString($adapter->platform);
$r = $adapter->query($sql);
echo $r->getSql()."\n";
$result = $r->execute();
while(($res = $result->next()) !== false){
print_r($res);
}
ただし、これは実際には機能しません。理由は 2 つあります。まず、プラットフォーム - 現在、Zend には mssql プラットフォームがありません。mssql が で識別子を引用する必要がある場合、 で識別子を引用するため、これは機能しません。したがって、Zend/Db/Adapter/Platform/Sql92.php を Mssql.php としてコピーし、の代わりにandを使用するように変更する必要があります。""
[]
[
]
"
第 2 に、odbc に接続するための dsn には、現在 zend がサポートしていない driver フィールドが必要なためです。Driver/Pdo/Connection クラスを開き、connect 関数を変更して、$ $dsn[] = "driver={$options['driver']}";
pdoDriver = odbc.$dsn[] = "host={$hostname}";
$dsn[] = "server={$hostname}";
他の回答は、Zend 2 ライブラリの仕組みを実際に理解していない人によって投稿されていることに注意してください。「dsn」に値を指定すると、他のフィールドは無視されます。「pdotype」はコードのどこにも表示されるフィールドではないため、どこで「pdotype」のアイデアを得たのかわかりません。