1

我正在使用 PL/SQL 连接尝试从虚拟数据库中获取行。但是,它似乎没有选择任何具有空值的行。在命令行上测试相同的 SQL 命令确实有效。

我创建了以下测试表:

CREATE TABLE test
( 
  id number(4) primary key,
  test_field VARCHAR(255)
);

并插入以下虚拟数据:

INSERT INTO test
(id, test_field) VALUES (1, 'test1');

INSERT INTO test
(id, test_field) VALUES (2, NULL);

当我在命令行 SELECT * FROM test 上执行以下 SQL 命令时;

我收到 2 行数据,如我所料(第 2 行没有 test_field 值)

但是,执行相同的命令槽

$conn = oci_connect(..., ..., ...);
if (!$conn) { // error handling }
$stid = oci_parse($conn, 'SELECT * FROM test');
oci_execute($stid);
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))) { 
    var_dump($row);
}

在此期间它没有达到任何东西。

这是抽象的 sql 数据,当我使用更大的数据文件对其进行测试时,它似乎会获取任何没有空列的行(如果需要,我可以发布数据集)。此外,诸如“SELECT 1, null FROM dual”之类的内容确实会返回空值。

几个小时以来,我一直在努力解决这个问题。我希望你们中的任何人都可以给我一些关于出了什么问题的指示。

预先感谢!

4

1 回答 1

0

您使用的是什么版本的 php 和 oracle?我试图重现您的问题,但得到了完美的回应:

array(2) {
  ["ID"]=>
  string(1) "1"
  ["TEST_FIELD"]=>
  string(5) "test1"
}
array(2) {
  ["ID"]=>
  string(1) "2"
  ["TEST_FIELD"]=>
  NULL
}

如果您根本没有得到任何输出,您确实应该像 Michael 建议的那样打开 error_reporting。

不要添加分号,因为这实际上会给您带来错误,因为这是一条 SQL 语句,而不是 PL/SQL 语句。

这就是 PHP 文档所说的:

SQL 语句不应以分号 (";") 结尾。PL/SQL 语句应以分号 (";") 结尾。

于 2013-01-09T16:25:22.300 回答