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

Iso, Toshitaka toshitaka.iso @ hp.com
2005年 1月 21日 (金) 12:49:40 JST


お世話になっております。

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 メーリングリストの案内