Oracle 10g接続設定 - PHP実行環境改変メモ(4)
引き続き、自宅のPCのPHP環境の改変。
- PHP実行環境構築メモ - HHeLiBeXの日記 正道編
- PHP実行環境改変メモ - HHeLiBeXの日記 正道編
- MySQL接続設定 - PHP実行環境改変メモ(2) - HHeLiBeXの日記 正道編
- DB2接続設定 - PHP実行環境改変メモ(3) - HHeLiBeXの日記 正道編
ためしにOracle 10g XEに接続してみる
PostgreSQL、MySQL、DB2とやって、Oracleだけやらないわけにもいかない(謎)ので、
とは言っても、Oracleはドライバが同梱されているので設定自体は簡単。
"php.ini"に次のような行があるので、今回は10gR2とコメントに書いてある方のコメントをはずす。
extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client ;extension=php_oci8_11g.dll ; Use with Oracle 11g Instant Client
これでApache httpdを再起動すれば、設定自体は完了。
あとは確認のために、次のようなスクリプトを実行してみる。
<pre><?php $oracle = oci_connect( 'oracleadmin', 'admin', '//localhost:1521/xe'); $owner = 'SYS'; $table = 'ALL_TAB_COLUMNS'; $query = "SELECT TABLE_NAME, COLUMN_NAME" . " FROM all_tab_columns" . " WHERE OWNER = :p_owner AND TABLE_NAME = :p_table" . " ORDER BY COLUMN_ID"; $stmt = oci_parse($oracle, $query); oci_bind_by_name($stmt, ':p_owner', $owner); oci_bind_by_name($stmt, ':p_table', $table); $success = oci_execute($stmt); while (($row = oci_fetch_assoc($stmt))) { print_r($row); } oci_free_statement($stmt); oci_close($oracle); ?></pre>
実行しているクエリは、条件で指定した表の列名一覧を取得するもの。
これを実行すれば、"all_tab_columns"表の列名一覧が表示されるはず。
ただひとつはまったのは、パラメータの値を指定したクエリを実行しようとしたときのこと。
当初、次のようなクエリにしていた。
$query = "SELECT TABLE_NAME, COLUMN_NAME" . " FROM all_tab_columns" . " WHERE OWNER = :owner AND TABLE_NAME = :table" . " ORDER BY COLUMN_ID"; $stmt = oci_parse($oracle, $query); oci_bind_by_name($stmt, ':owner', $owner); oci_bind_by_name($stmt, ':table', $table);
すると、次のようなエラーが‥
ORA-01745: ホスト/バインド変数名が無効です。
調べてみると、どうもPL/SQLの予約語になっている単語はパラメータ名に使用できないらしい。
パラメータ名だということを表すためにコロン(':')がついているんじゃないのかとも思うのだが(ry