php接続mssqlについて:pdo odbc sql server

3375 ワード

phpは1つしかありませんpdo_odbc.dll.
so~最新の最高のphp接続mssql方法はこうであるべきである.
 
  
$cnx = new PDO("odbc:Driver={SQL Server};Server=127.0.0.1;Database=test;",'sa','asd123');
var_dump($cnx);
$a = $cnx->query("SELECT * FROM [user]");
var_dump($a);
foreach ($a as $b) {
var_dump($b);
}
?>

PHPがMSSQLデータベースに接続できない問題について今日新しいサーバーを配置しました.構成はIIS+phpです.その結果、実行時にphpがリモートmssqlデータベースに接続するエラーが発生しました.エラーコードは以下の通りです.
Warning: mssql_connect(): Unable to connect to server:
以前は大丈夫だったと思いますが、どうしたんですか.それからネット上で検索して、1篇の文章を発見して、やっともとのサーバーがmssqlをインストールする必要があることを発見してphpでmssqlを接続することができて、もともと新しいサーバーの上で私はmssqlを使う必要はありませんが、今は仕方がなくて、それをインストールするしかなくて、mssqlをインストールした後で大丈夫です.
linuxの上にあるapache+phpならどうなるか考えていますが、mssqlをインストールする必要はないでしょう.ほほほ、気絶しました.
次は見つけた文章です.
php構成:
php.iniファイルには以下のように設定されています.
;extension=php_mssql.dll前のセミコロンを外す
extension_を見つけますdir = d:\extension\
あなたのphp.iniの中はd:extensionではないかもしれません.
phpインストールディレクトリの下にあるextensionsディレクトリの下にあるphp_に変更mssql.dll、あるパス、もしあなたがそれを他の場所に移動しなかったら(phpインストールパスがd:phpであると仮定します)
extensionに変更しますdir=d:\php\extensions\
Webサーバを再起動します
この点は簡単ですが、このような設定をした後も接続できません.エラーの情報は以下の通りです.
MS SQL Serverデータベース接続エラー!データベースホスト変数の設定が正しいかどうかを確認してください!!!
ホストの変数の設定は何度もチェックしましたが、それらの設定は少しも問題がありません.ホームページをめくって、次の点を見つけました.
php.com資料:
I am trying to connect to SQL Server 2000 from PHP
I bumped to following warning:
Warning: mssql_connect(): Unable to connect to server: SERVER\Portal
....... on line 5
on line 5 there is:
$db_connect = mssql_connect('SERVER\Portal', 'sa', 'my_passwd');
I did the following
1.enabled php_mssql.dll extension in PHP.ini
2.every dll is in proper place(System32 or PHP folder),including ntwdblib.dll
I search lots of profile throught web ,but no one give me proper answer to resolve it.
after a few hour ,I found the problem was caused by
ntwdblib.dll ,which version is 7.00.839 ,when I replaced old ntwdblib.dll with the new
ntwdblib.dll ,which version is 8.00.194 ,all problem are solved.
We had some, read A LOT, of problems with MSSQL under Windows 2003.
We had 2 the same windows, php, php-ini, everything machines but only one could connect.
Unable to connect was the error message.
Finnaly we checked the version of ntwdblib.dll and the one distributed with PHP was 7.00....
and the version of the one on the SQL Server install was 8.00.... so we copied this one in
the php and apache dir and it worked.
問題はこうして見つかったのですdll
ntwdblib.dllの主な役割はsql server接続サービスを提供することです.
私が使っているphpバージョンは4.3です.9、そのサーバーをインストールしたwindows/system 32/でntwdblibを調べました.dllファイルのバージョンは2000.2です.8.0、このバージョンはsql server 7.0をサポートしています.PHPをインストールするとdllsの下のすべてのファイルがシステムに上書きされるからです.
ディレクトリの下にあるので、sql server 2000に接続するときはもちろん接続できません.
その後、sql server 2000が正常にインストールされているサーバでntwdblibを調べました.dllのバージョンは2000.80です.2039.0、私はこのファイルをコピーして、以前のバージョンを上書きして、サーバーを再起動した後、すべて正常です.
補足:データベース名の先頭が数字である場合にも開くことができないというメッセージが表示されますが、この場合は簡単にデータベース名を中括弧で囲みます[]
123 bbsを[123 bbs]に書き換えると問題ありません.また、データベース名がsql serverの予約字と衝突した場合も、中括弧の方法で解決できます.
結局、PHPがsql server 2000に正しく接続できなかった問題はやっと解決し、半日かかりましたが、収穫は大きかったので、今それを貼って、同じ問題に遭遇した兄弟たちに回り道を少なくさせました.