RadPHP でSQL Serverへの接続テスト
◆テスト1 データエクスプローラでSQL Serverに接続してみる
結果: NG
RadPHPの「データエクスプローラ」で、「MSSQL」を選択、新規の接続を追加し「テスト接続」のボタンをクリックすると、 下記のメッセージが出力され、接続できない。 TDBXError: DBX Error: Driver could not be properly initialized. Client library may be missing, not installed properly, or of the wrong version. <接続の登録内容> サーバー名 : ibmsvr01\mdb01 データベース名 : testdb ユーザ名 : user パスワード : **** <環境> 開発用PC : Windows7 , IIS7 , PHP5.2.14 サーバー : Win2003 server , SQL Server 2005 , IIS7, PHP5.2.14 <その他> PHP5からは、SQL Serverにアクセスできる状態。 RadPHP からは上記の通りアクセスできない
?
◆テスト2 SQL Server 2008 Native Clientをインストールして再テスト
SQL Server 2005 Native Clientはインストールしていたが、ダメもとでSQL Server 2008 Native Clientを
インストールして再テストしてみた。
ダウンロード: SQL Server 2008 Native Client
結果: OK
データエクスプローラで、テーブル名等が参照できるようになった どうして、SQL Server 2008 Native Clientをいれることによって、接続できるようになったのか、 まったく理解できない。 使っているSQL Serverは2005で、2008ではない。 全く理解できない。 なんか怒りがこみ上げてきた。 参考にさせてもらったサイト:海外サイトだったがURL記録し忘れた。 そこに、SQL Server 2008 Native Clientをいれてみそって書かれていた。
?
◆テスト3 データエクスプローラのテーブルをフォームに張り付けて接続できるかテスト
結果: NG
データエクスプローラが使えるようになったので、テーブルをフォームに張り付けて接続できるかテストしてみた。右のデータエクスプローラのテーブルを、フォームにドラッグすると、 あっという間にコントロールが4つ配置されるので、そのまま実行アイコンをクリック エラーメッセージは... Fatal error: Call to undefined function mssql_get_last_message() in C:\Program Files\Embarcadero\RadPHP\3.0\rpcl\adodb\drivers\adodb-mssql.inc.php on line 542 どうも、モジュールが有効になっていないみたい。 で、phpinfo を確認してみることにする 新規ユニットを作成し、下記のコードをペーストし、実行する <?php phpinfo(); ?> phpinfoをみると、ピンポン! mssqlのセクションが無いことがわかった SQL Serverのモジュールを有効にしてやればいいのか php.iniはどこかな phpinfoでは下記になっているが、php.iniが見当たらない C:\Users\2198\AppData\Roaming\Embarcadero\RadPHP\3.0\php\php.ini どうなってんの? まあいいや。 つくろう。 php.ini.template php.ini-recommended php.ini-dist なんか、それっぽいファイルが3個ある php.ini を php.ini.template から作成 php.ini と php.ini.template の ;extension=php_mssql.dll のコメントは削除(先頭の;を削除して有効にする) ?
?
◆テスト4 php_mssql.dllを有効にして再テスト
結果: OK しかし、文字化け
php_mssql.dllを有効にして再テストしてみた。 ようやくグリッドにデータが表示された。 しかし、カラム、データの漢字部分が文字化けしてる。
?
◆テスト5 文字化けの状況を調査
開発用PCにはPHPの環境が2つある
・開発用PCにインストールした単体PHP
・RadPHPのPHP
どちらのPHPも文字化けが発生するか、テスト用のPHPソースで確認してみた
<テスト用ソース>
testdb データベースに接続し、namelistテーブルの内容を表示する
”名前”と”tel”の列があり、”名前”列のデータは漢字を使っている
<?php $server = 'ibmsvr01\mdb01'; $userid = 'user'; $passwd = 'user'; $dbName = 'testdb'; $query = "select * from namelist"; $db = mssql_connect($server, $userid, $passwd); mssql_select_db ($dbName, $db); $res = mssql_query($query, $db); while($row = mssql_fetch_array($res)){ ? echo $row["名前"]. "," . $row["tel"] . "<br>\n"; } mssql_free_result($res); mssql_close(); ?>
結果: RadPHPのPHPのみ、漢字が表示されない
開発用PCのPHPは問題なく表示できた
ということは、RadPHPのPHPの環境は、漢字表示に問題があることがわかった。
最新の製品とだというのに、ちょっと残念。
※追加:データベース名、テーブル名、列名、データに漢字を使った本番DBでテストしたところ
単体PHPは問題なく表示出来た。
?
◆ここまでのまとめ
RadPHPでSQL Sererを使うためには、RadPHPをインストールしただけでは簡単には使えない。 また、情報も少ない為、問題が起こった時は手に負えない。 SQL Server接続のWebアプリ用に、「RadPHP」の購入を考えていたが、見送りかな? Webアプリ用にLotus Notes(RadPHPより安い:2万円)を使っているが、SQL Server接続するには問題があり、 テーブルの更新をLotus Notes専用にする必要がある。 高価なパッケージをつかえば、自由に更新出来るようだが、そんな余裕はないので、RadPHPに期待していた次第。
◆テスト6 EDNで提供してもらった手順でテスト
結果: テーブル名を英数字にすれば、列名、データの漢字が文字化けせず表示出来るようになった
しかし、dbtables.inc.php なんか修正しちゃって後で問題がでないかちょっこし心配。
手順の内容:Shift_JIS で統一することで(+RCPLの一部修正)、DBGrid/QDBGridで日本語データを表示する 1. \Embarcadero\RadPHP\3.0\php\php.ini.template の php_mssql.dll のロードを有効にする 2. PHP が ntwdblib.dll を読み込めるように、PATHの通った場所にコピーする 3. RadPHPを再起動する 4. [ツール]-[オプション]-[エディタ設定]-[新規ファイルのデフォルト設定]-[文字のエンコーディング]を ANSI に設定 5. [ツール]-[オプション]-[PHP]の各種設定をSJISに設定する Default Charset: shift_jis HTTP Output: SJIS Internal Encoding: SJIS 6. \Embarcadero\RadPHP\3.0\rpcl\dbtables.inc.php をメモ帳で開いて58行目のコードを -------------------------------------------------------------------------------- reset($fd); -------------------------------------------------------------------------------- から -------------------------------------------------------------------------------- if(!is_array($fd)) return($result); reset($fd); -------------------------------------------------------------------------------- に変更して、保存する 7. 新規にRCPLアプリケーションを作成して、特定のフォルダにプロジェクトを保存する 8. データエクスプローラからフォームにテーブルをドラッグ&ドロップする 9. アプリケーションを実行し、DBGridに日本語のカラムやデータが表示される 10. DBGridを削除し、QDBGridに切り替えても正しく表示される
?
◆テスト7 データベース名に漢字を含むデータベースで再テスト
テスト用のDB作成(本番データは載せられないので...)
結果 : OK
みごとに漢字が表示されました。これで、RadPHPでSQL Serverに接続しても、文字化け問題は回避できそうです。
早速、RadPHPと「Delphi for PHPではじめるPHPビジュアルWeb開発」 2,625円を買いたいと思います。