【问题标题】:OCI8 OCI_FECTH_ARRAY returning no values no errorsOCI8 OCI_FECTH_ARRAY 无返回值无错误
【发布时间】:2017-03-09 04:28:27
【问题描述】:

您好,我正在运行一个简单的 SQL 语句来提取数据并使用 OCI_FETCH_ARRAY() 进行显示,但没有成功。 PHP 不会在 error_log 中记录任何错误,或者不显示错误消息而只显示空白页。

表定义如下:

以下是 SQL,我可以在 SQL developer 上运行以提取相关数据:

$sql="SQL Here";

运行以下 OCI_PARSE 和 OCI_EXECUTE 函数时的错误处理:

$stid = oci_parse($conn,$sql);

$error_msg_conn= oci_parse($conn,$sql);

if (!$error_msg_conn) {
  $e = oci_error($conn); 
  echo htmlentities($e['message']);
}

$error_msg_stmt = oci_execute($stid);

if (!$error_msg_stmt) {
  $e = oci_error($stid); 
  echo htmlentities($e['message']);
}

显示以下结果集中记录的代码:

while (($row = oci_fetch_array($stid,OCI_RETURN_NULLS+OCI_BOTH))==TRUE) {

                echo "<td>".$row[0]."</td>";
                echo "<td>".$row[1]."</td>";
                echo "<td>".$row[2]."</td>";
                echo "<td>".$row[3]."</td>";
                echo "<td>".$row[4]."</td>";
                echo "<td>".$row[5]."</td>";
                echo "<td>".$row[6]."</td>";
                echo "<td>".$row[7]."</td>";
                echo "<td>".$row[8]."</td>";
                echo "<td>".$row[9]."</td>";
                echo "<td>".$row[10]."</td>";
                echo "<td>".$row[11]."</td>";
                echo "<td>".$row[12]."</td>\n";
                echo "</tr>\n";
}
echo "</table>\n";

oci_free_statement($stid);
oci_close($conn);

?>

知道为什么我在 PHP 输出中看不到任何内容吗? error_log 中甚至没有错误?

谢谢。

【问题讨论】:

  • 你看到任何输出了吗?
  • 我只看到打印在 oci_fetch_array() 循环之外的 html 标头。没有其他的。没有任何错误。
  • 你看到源代码中的开始&lt;table&gt;标签了吗?
  • 是的,所有的 HTML 都打印得很好。奇怪的是我可以在 sql developer 上运行相同的 sql 并生成数据。此外,所有其他 php 页面都工作正常。
  • 试试while($row = oci_fetch_array($stid,OCI_BOTH)) {

标签: php oracle oci8


【解决方案1】:

在你上面的评论中你说

它不喜欢 where 子句。 PHP 可以在没有 where 子句的情况下提取数据。知道为什么 OCI8 会导致“WHERE TRADE_DATE=TO_CHAR(SYSDATE, 'DD-MON-YY')”出现问题吗?

那是因为您的 TRADE_DATE 列是 DATE 而不是 VARCHAR

desc IRINS_COMPOSITE_INSTRUMENTS
Name                Null     Type          
------------------- -------- ------------- 
...
TRADE_DATE                   DATE

这样做TO_CHAR(SYSDATE, 'DD-MON-YY') 会创建一个字符串,然后使用您当前的 NLS_DATE_FORMAT 设置将其转换回 DATE

假设您只是想忽略SYSDATE 的时间部分,请尝试将其更改为

WHERE TRADE_DATE=TRUNC(SYSDATE)

假设修复它,它与 OCI 或 OCI_FETCH_ARRAY() 无关

【讨论】:

  • 将尝试@ShoeLace 您的解决方案,但当我这样做时,WHERE TRADE_DATE=TO_CHAR(CURRENT_DATE) 工作正常。
  • 它可能有效.. 但它不可预测.. 比较日期到日期(而不是日期到字符),你应该没问题。
猜你喜欢
  • 2017-11-14
  • 2010-12-17
  • 2021-06-19
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2011-06-19
相关资源
最近更新 更多