我正在尝试从dummie数据库中获取行的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);
当我在命令行上执行以下SQL命令时 SELECT * FROM test;
我收到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”的确会返回空值。
我一直在敲打这个问题几个小时。我希望你们中的任何一个人都能给我一些关于出错的指示。
提前感谢!
答案 0 :(得分: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 语句应以分号结尾(“;”)。