1

存在する場合、非 Windows OS 上の MS SQL Server で ZF2 を使用する標準的な方法は何ですか?

ドキュメントからわかることから、公式にサポートされているのは Sqlsrv ドライバーのみであり、Windows プラットフォームでのみ動作します。

ZF1 ではPdo_Mssqlアダプタを使用し、 をpdoTypeとして指定しましたdblib。ZF2で同様のことをすることへの言及が見つかりません。

どうやら、大規模なリファクタリング中に削除さた Pdo\Mssql ドライバーがしばらく前にあったようですが、現在文書化されている Pdo_Dblib の使用方法は見当たりません。

上記のアダプターのドキュメントによると、アダプター構成でドライバーを に設定できますがPdo=OtherPdoDriver、この使用法に関する文書化された例はありません。Pdo=Pdo_Dbliborを使用できるということは、Pdo=dblib自動的に機能するということですか?

PDO ODBC ドライバーへの参照を渡していることがわかりました。これは使用可能な代替手段ですが、ドキュメントやコード参照が見つかりません。

4

3 に答える 3

3

php5-sybaseをインストールします。freetdsそれがインストールされていることを確認してください。/etc/freetdsと呼ばれるの下にconfファイルがあるはずですfreetds.conf

freetds.confファイルで、mssql接続を次のように設定する必要があります。

[MyMsSqlServer]
host = symachine.domain.com
port = 5000
tds version = 5.0

次に、(ここで例としてZF2アルバムチュートリアルを使用して)次のようにアダプタを設定します。

return array(
    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'dblib:host=MyMsSqlServer;dbname=zf2tutorial',
        'charset'        =>  'UTF-8',
        'username'       => 'username',
        'password'       => 'password',
        'pdotype'       => 'dblib',
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

これでどこにでも行けるかどうかを確認して、私に知らせてください。私はこれを機能させるのに時間がかかりました、そして私はこれで問題を抱えている他の誰かを助けることをとても嬉しく思います!!!

于 2013-03-24T03:28:04.760 に答える
1

pdotype を dblib に設定した pdo 接続を使用できます (ロードされた pdo_dblib 拡張を使用)。 sqlsrv は Windows でのみ使用できます。

ここでは、MS SQL Server に接続するために freetds と unixodbc がどのように構成されているかを確認できます。 http://featurebug.blogspot.de/2011/01/mac-os-x-php-zend-server-ce-freetds-and.html

更新: 接続文字列を使用して接続する方法の例を次に示します。

$db = new Zend\Db\Adapter\Adapter(
    array(
        'driver'        => 'Pdo',
        'dsn'            => 'dblib:host=mssql_freetds;',
        'username'       => 'mssql_username',
        'password'       => 'mssql_password',
        )
);
于 2013-03-12T09:43:19.180 に答える
1

はい、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」のアイデアを得たのかわかりません。

于 2013-08-22T11:04:08.653 に答える