[PHP-users 24188] Re: Oracle接続時のWarning: ociexecute(): と Warning: ocifetch(): について

Mitsui hiro @ cacgrp.co.jp
2005年 1月 21日 (金) 13:20:04 JST


hiroと申します。

間違っていたらすみませんなのですが

以下のhoge.phpを見る限り、そのファイル起動時に
以下の行にアクセスしていると思われます。

【rank_list($no,'S'); ← FORMの値を】

起動時には「$no」を宣言しているだけなので、値がありません
よって、その状態でクエリーを実行するとエラーが出るかと思われます。
よって、回避方法の一つとしては
「$no」に値の有る無しでその関数を実行するようにしたほうがよろしいかと思われます。
いかがでしょう?

> お世話になっております。
>
> ORACLE接続について質問させてください。
>
> 以下のようなPHPのコードがあり、
> hoge.php画面表示時に
> (1) Warning: ociexecute(): OCIStmtExecute: ORA-00936: missing expression in /var/www/html/test/hoge.php on line 37
> → 「OCIExecute($sql_RANK);」の箇所
>
> (2) Warning: ocifetch(): OCIFetch: ORA-24374: define not done before fetch or execute and fetch in /var/www/html/test/hoge.php
on line 51
> → 「while(OCIFetch($sql_RANK))」の箇所
> というエラーが二つ表示されます。
>
> そして、FORMの「表示」ボタンを押すと画面描画がエラー無く表示されますが、
> IEを閉じて、再度表示すると同じエラーが表示されます。。。
>
> ためしにFORMからの値を関数「rank_list」に渡さず、
> 直接「rank_rist(45,'S')」といった感じに入れるとエラー無く画面表示されます。
>
> このエラーの回避方法・確認ポイントをご存知の方がおられましたら、
> なにとぞご教授いただければと思います。
>
> 以上です。
>
> 【PHPのバージョン】
> PHP 4.3.10
>
> 【Oracleのバージョン】
> Oracle9.2.0.4
>
>
> ============== hoge.php ==============
>
> <center>
> <form method=post action=hoge.php>
> <select name="AAAA">
>           <option value="38">38</option>
> <省略>
>           <option value="45">45</option>
>           <option value="46">46</option>
> </select></td>
> 番目を<input type=submit value="表示">
> </form>
> </center>
>
>
> <?php
> $no=null;
> if (isset($HTTP_POST_VARS['AAAA']))
> {
>      $no = $HTTP_POST_VARS['AAAA'];
> }
> rank_list($no,'S'); ← FORMの値を
>
> function rank_list($no,$id)
> {
>         // Oracleとの接続
>         $conn = OCILogon("user_id", "password", "DBNAME");
>
>         // SQL文のparse
>         $sql_RANK = OCIParse($conn,"select * from rank where NO=" . $no . "and ID='" . $id . "'");
>
>         // SQL文の実行
>         OCIExecute($sql_RANK);
>         $ncols = OCINumCols($sql_RANK); ← (1)のエラー発生箇所
>
>
>         echo "<table border>";
>         echo "<TR bgcolor=#fffccc>";
>         for ( $i = 1; $i <= $ncols; $i++ )
>         {
>                 $column_name  = OCIColumnName($sql_RANK,$i);
>                 echo "<TH>" . $column_name . "</TH>";
>         }
>         echo "</TR>";
>
>         // データのFetch
>         while(OCIFetch($sql_RANK)) ← (2)のエラー発生箇所
>         {
>                 echo "<TR>";
>                 for ( $i = 1; $i <= $ncols; $i++ )
>                 {
>                         $column_name  = OCIColumnName($sql_RANK,$i);
>
>                         // データの表示
>                         echo "<TD><CENTER>" . OCIResult($sql_RANK, $column_name) . "</CENTER></TD>";
>                 }
>                 echo "</TR>";
>         }
>         echo "</TABLE>";
>         echo "<br><br><br>";
>         OCIFreeStatement($sql_RANK);
>
>         // Oracleから切断
>         OCILogoff($conn);
> }
> ?>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>
>



PHP-users メーリングリストの案内