2008年09月17日

PHP5 + PHP_PDO_OCI8 のエラー

環境:windowsXP + PHP5(5.2.6) + Oracle10g Client(10.2)

windowsXPにPHP5をインストールしてOracleへ接続できるように設定していたところ、下記エラーが発生。
なお、Apacheはインストールしておらず、コマンドプロンプトからOracleへの接続をテストした。
PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'php_pdo_oci8.dll' in Unknown on line 0

bugs.php.netに該当のPOSTを発見。

結論、Oracle8i/Oracle9i Clientを使う場合は php_pdo_oci8.dll を使い、Oracle10g Client(もしくはそれ以上)の場合は php_pdo_oci.dll を使えばよいとのこと。

[28 Jun 2007 4:44am UTC] alison dot holloway at oracle dot com

My suggestion is to change the installer so that the following occurs.

Under PDO extensions, have two options for the Oracle PDO drivers:

1. Oracle8i/Oracle9i Client
This installs php_pdo_oci8.dll

2. Oracle10g Client and above
This installs php_pdo_oci.dll

The PDO library is based on the Oracle Client, not the Oracle Database,
so I think it's important to state that in the install notes in the
right hand pane when selecting the option.

Each option should be mutually exclusive. So you can't install both.
This will cause problems.

The current two installs seem to do the same thing, install the
php_pdo_oci8.dll and php_pdo_oci.dll files. It doesn't make sense.

As for the errors that are currently happening, I haven't done any
further investigation, but I'd suggest getting the install right now,
then fixing the dll loading issues.
 
<今回の確認ポイント>
・Oracle Client
  Oracle10gクライアント(Instantではないやつ)
・extension_dir の設定
  extension_dir = "c:/php/ext"(問題なし)
・extension の設定
  extension=php_oci8.dll
  extension=php_pdo.dll
  extension=php_pdo_oci.dll
  extension=php_pdo_oci8.dll(←結論コレが不要だった)
・PATH の設定
  Do You PHP?にOracle Clientが複数入っている場合はPATHの順番を確認、と記載してあったが10gのClientしか入っていないので問題なし。
・ORACLE環境変数の設定
  ORACLE_HOME、LD_LIBRARY_PATHを設定しないとダメ、とあったが「Apacheを起動する際に設定」とのことだったので対象外。

extension=php_pdo_oci8.dll をコメントアウトし、pdoで接続したところWarningが表示されなくなった。

接続確認用ソース(参考:Do You PHP?
<?php
$db = new PDO("oci:dbname=//server:1521/sid", "user", "pass");
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$stmt = $db->prepare("SELECT SYSDATE FROM DUAL ");
$stmt->execute();
$cnt = 1;
$row = array();
echo '<table border="1">';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<tr>';
echo '<th>' . $cnt++ . '</th>';
foreach ($row as $column_name => $column_value) {
echo '<td>' . $column_value . '</td>';
}
echo '</tr>';
}
echo '</table>';
$stmt = null;
?>


タグ:Oracle php5 Windows

posted by まきすけ at 16:57 | Comment(0) | TrackBack(1) | Linuxとか
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/106704129

この記事へのトラックバック

Oracle+PHP で ORA-12154エラー
Excerpt: 環境を移行したらまたおかしなことに…
Weblog: 猫ぐらし
Tracked: 2010-07-31 17:58