• 締切済み

PostgreSQLからOracleへの移行で

はじめまして。 PostgreSQL+PHP4で動作していたスクリプトを Oracle+PHP4に移行する作業をしています。 SELECTで取得された行の件数を得る為に、 pg_num_rows(result) を使っている箇所があるのですが、それと 同様の動作をするOCI関数はあるでしょうか? ※都合により、DBアクセス関数は全てOCI関数での 実装を予定しています。 ora_numrows()が使えれば良かったんですけれど。。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • kotaron
  • ベストアンサー率61% (8/13)
回答No.1

こんにちは、 Oracleのバージョン情報を提示してもらえると、 もう少し適切な回答がお答えできるかもしれません。 とりあえずのお手ごろで便利な方法は、 $numRows = OCIfetchStatement($id, $data); を利用する データが取得できて、取得行数までのお手軽さ 10gをご利用の場合は、利用する関数により、注意事項がいろいろとあります。 10gの場合は、もう少しの間、便利そうな関数は利用せず、クエリでcountを取るなどの対処をした方が良い場合があります。 クラスライブラリに変更を考えた場合、なおさら もう少しの辛抱かもね

hMogera
質問者

お礼

バージョンは、Oracle9i+PHP4.3.1です。 とりあえずはOCIFetchStatementで対応しました。 なるほど、こんな使い方もあるんですねえ。。 本当にありがとうございました。

関連するQ&A

  • PostgreSQLからSQLiteへの移行について

    次のPostgreSQL用PHP関数と同機能のSQLite用PHP関数もしくは、SQLite用PHP関数の組み合わせを教えてください。 pg_fetch_result pg_affected_rows pg_result_seek

    • 締切済み
    • PHP
  • postgresql関数をつかったレコードの読み込みについて

    いつもお世話になっております。 早速ですが、 pg_fetch_array(result,i,PGSQL_BOTH) という関数でレコードのフィールドを配列で取得したいのですが、以下のようなエラーが出てしまいます。 Warning: Unable to jump to row 1 on PostgreSQL result index 2 in しかし、フィールド情報は取得しているようなのですが、何がいけないといわれているのでしょう? また、取得した配列はキーが連想配列になっていて、添字ではアクセスできません。オプション「PGSQL_NUM」も試してみましたが、ダメでした。 何をどのように調べたら良いか立ちつくしております。 どなたか、アドバイスを頂けないでしょうか php 4.06 postgresql 7.2

    • ベストアンサー
    • PHP
  • php,postgreSQLについて

    こんにちわ。初めて投稿します。よろしくお願いします。 現在、postgreSQLで作ったテーブルのデータをつくり、検索フォームで指定した条件(この場合はお店のコード) を、指定先のページに表示させたいのです。 SQLに直接、表示させたいコード番号を入力すれば出るのですが、フォームに入力された値を変数として格納し、SQL文の中に自動にあてはめる方法がわかりません・・。 どうかよろしくお願いします。 phpは4.1です。inp_store_cdは検索フォ-ムでのinput名です。 *表示画面 <?php $conn = pg_connect ("host=localhost port= 5432 dbname=test ); if ($conn == false) { print("データベースに接続できませんでした。"); exit; } $sql = "select * from store_basic where store_cd=$_POST["inp_store_cd"]"; if (!empty($inp_store_cd)) { $sql = $sql. "and sotre_cd =" .$_POST["inp_store_cd"]; } $result = pg_exec($sql); // selectを実行 if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } $rows = pg_numrows($result); // 行数を取得 $columns = pg_numfields($result); // 列数を取得 print("<table border>\n"); for ($j = 0;$j < $rows;$j++) { if ($j == 0) { print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_fieldname($result,$i); // 列名の取り出し print("<th>$str</th>"); } print("</tr>\n"); } print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_result($result,$j,$i); // データの取り出し print("<td>$str</td>"); } print("</tr>\n"); } pg_freeresult($result); // 検索結果の解放 print("</table>\n"); ?>

    • 締切済み
    • PHP
  • PostgreSQLに書き込み

    今、PHPでPostgreSQLに接続して データを書き込もうとしていますが、 ”ページを表示できません”とエラーが出てしまいます。 <html> <body> <title>PostgreSQL実験</title> <div align="center"> <table border=1> <caption>検索結果</caption> <tr> <td>ID</td> <td>氏名</td> <td>点数</td> </tr> <br> </table> <?php $d_base = pg_pconnect("user=postgres password=grjtf dbname=mytbl"); if($action == post && $sign == '書き込み') { if($id && $name && $score) { pg_query($d_base,"insert into mytbl values($id,$name,$score)"); } } if($action == post && $sign == '点数修正') { if($id && $score) { pg_query($d_base, "update mytbl set score=$score where id=$id"); } } if($action == post && $sign == '一行削除') { if($id) { pg_query($d_base, "delete from mytbl where id=$id"); } } if($result = pg_exec($d_base, "select * from mytbl")) { $row = pg_num_rows($result); for($i = 0; $i < $row; $i++) { $arr = pg_fetch_row($result, $i); echo "<tr>"; for($j = 0; $j < count($arr); $j++) { echo "<td>$arr[$j]</td>"; } echo "</tr>"; } } ?>

    • ベストアンサー
    • PHP
  • PHPの配列をDBのテーブルに入れたいのですが

    完全に行き詰まりそうなので助けていただきたく投稿(投降)します。 PHP内でSQLを走らせた結果を、 $result に入れています。 $rows = pg_num_rows($result); print('レコード数は、'.$rows.'です<br><br>'); // 上記、2行のコードで件数が正しいことは確認しました。 $sabun = array(); $sabun = pg_fetch_all($result); $cnt1 = count($sabun); print('配列sabunのレコード数は'.$cnt1.'です<br><br>'); // 上記、4行のコードで配列に格納された件数が正しいことは確認しました。 // 最初の2行の件数とこの4行の件数は同じ件数です。 // ここで配列sabunのデータをテーブルに入れる /* エラーが出た */ $result = pg_insert( $link,テーブル,$sabun ); /* エラーが出た */ $result = pg_insert( $link,テーブル,$result ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $sabun ); /* エラーが出た */ $result = pg_copy_from( $link,テーブル, $result ); // 上記、4種類のコードを試したのですが、全てエラーが出ました(泣) if (!$result) { print('テーブルへの登録が失敗!<br><br>'.pg_last_error()); $err_flg = 1; goto ENDCLR; } 「テーブルへの登録が失敗!」以外のエラーメッセージ等は 表示されませんでした。 エラーが出た4種類のいづれかでうまく行くと思ったのですが、 全滅してしまい途方に暮れています。 根本的にPHPへの理解が足りないのかもしれません。 何か解決の糸口などご教授いただけますと助かります。 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • Oracleに接続できません

    http://oshiete1.goo.ne.jp/qa4731410.htmlでの質問を踏まえた上で、悩んでおります。 PHPにてサーバにあるOracle9iサーバに、 クライアント(Oracle10gクライアントインストール済み)からPHPで接続しに行きたいのですが、 oci_connect関数が上手く機能していないようで、接続できません。 oci_connectの引数には、oci_connect("ユーザ名", "パスワード", "tnsname.oraにある名称") を設定して、接続をしようとしています。 接続エラーを見るため、oci_errorにてエラーをキャッチしているのですが、 そのエラー内容が空っぽ(Falseで返ってくる)のため、何がおかしいのかわからない状況です。 構築環境は以下の通りです。 OS:WindowsXP(SP3) Webサーバ:IIS 使用DB:Oracle9i(クライアントは10g) 珍しい組み合わせのため、あまり情報がない状態です。 PHP、Webサーバの設定は色々なサイトを確認して設定できたつもりなのですが、 どこかしらに不備があるのでしょうか? Apacheであれば、エラーがログに残るようですが、IISにそういった機能はないでしょうか? 何かアドバイス等ありましたらお願いします。

    • 締切済み
    • PHP
  • PostgreSQLに書き込むことが出来ない

    環境→Windows XP Home Edition Apache→Apache 2.0.59 PostgreSQL→PostgreSQL8.1.6 PHP→PHP4.4.4 DBに書き込もうとしていますがなかなか上手くできません。 <?php //データベースに接続する $conn = pg_pconnect("user=postgres password=grjtf dbname=mytbl"); //データベースに接続出来るかチェック if(!$conn) { //エラーメッセージ echo "An error occured.\n"; exit; } else { //接続成功メッセージ print "DB(mytbl)に接続しました。<br>"; } //データベースに接続し、mytblからidとnameを取り出す $result = pg_query($conn,"SELECT id,name FROM mytbl"); //データベース(mytbl)からidとnameを取得する if (!$result) { //エラーメッセージ echo "An error occured.\n"; exit; } else { //接続成功メッセージ print "idとnameを取得しました。<br>"; } //データベースmytblに書き込む if(isset($_POST["action"]) && $_POST["sign"] == '書き込み') { //名前とスコアが何も書かれていなかった場合 if($_POST["id"] && $_POST["name"]) { //データベースに書き込む $sql="INSERT INTO mytbl(id,name) VALUES('$id','$name')"; pg_query($conn,$sql); //成功メッセージ print "DB(mytbl)に書き込みました。<br><br>"; } else { //エラーメッセージ print "書き込めませんでした。<br><br>"; } }

    • ベストアンサー
    • PHP
  • PHPでのOracleサポートのオプション

    宜しくお願いします。 ものの本では PHP4.2.1でOCI8関数を使う場合に 以下のオプションを付ける、、、とありました。 ======================================================== $ ./configure --with-apxs=/usr/local/apache/bin/apxs \ --with-oci8=[ORACLE_HOMEのパス] \ (*1) --enable-sigchild \ (*2) --enable-mbstring \ --enable-mbstr-enc-trans \ --enable-mbregex \ : : (その他) ======================================================== (*1)と(*2)の部分がOracleに関する部分と あったのですが、(*2)を付け忘れてインストールして いました。付け忘れに気づいたのは しばらく後の事で、それまでOCI8関数を使った PHPアプリも普通に動いています。 --enable-sigchild をつけなかった場合に Oracleにどういった影響があるのでしょうか? お客様サーバでの痛恨のミスで PHPを入れ直すか、影響が無ければそのままに しておくか悩んでおります。 ご存知の方がおりましたらアドバスお願いいたします。 OS:RedHat7.1 Oracle 9i 9.0.1.3.1 PHP4.2.1 宜しくお願いします。

  • PHPにてoci8.dllが正常に関連付けされているかの確認

    php_oci8.dllを用いて、PHPでOracleの関数が使用出来るようにしたいのですが、 現在の設定で上手く動いているかの確認が出来ません。 ------------------ //DBへ接続開始 $conn = @oci_connect("△△△", "●●●", "○○○"); if (!$conn) { $e = oci_error(); echo htmlentities($e['message']); exit; } ------------------ 上記のような簡素な処理(DBに接続しにいき、失敗ならばエラーメッセージを表示) を組んで動かしているのですが、エラーメッセージが表示されません。 しかし、エラーを取得する処理(if文内のoci_error)までは入ってきているため、 接続の書式や設定に問題、またはエラーメッセージが空なだけなのか、 またはOracleの関数自体が機能していないのか、判断がつきません。 if文内に入る(oci_connectで接続できない→Falseを返す)ということは、 oci8.dllとは正常に連携し、oracleの関数は機能している、という認識でよいのでしょうか。

    • 締切済み
    • PHP
  • PHPとPostgreSQLとの連携

    今、WindowsXPでPHPとPostgreSQLを連携 させたいのですがなかなか上手く行きません。 どなたか、分かる方がいれば宜しくお願いします。 環境 OS→Windows HomeEdition Apache→Apache HTTP Serber2.0.59 PHP→PHP4.4.4 PostgreSQL→PostgreSQL8.1.4 です。 PostgreSQLの中にtest_dbというデータベースをつくり setuzoku.phpから接続できるかどうかのif文を作り確認 していますが、何度やっても接続失敗と出ます。 <?php $con = pg_connect("user='postgres' dbname='test_db' password='grjtf'"); if (! $con) { print "接続失敗"; } else { print "接続成功"; } ?>

専門家に質問してみよう