1

PL/SQL 接続を使用して、ダミー データベースから行をフェッチしようとしています。ただし、null 値を持つ行は選択されていないようです。コマンド ラインで同じ 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データです。より大きなデータファイルでテストすると、null列を持たない行をフェッチするようです(要求があればデータセットを投稿できます)。また、「SELECT 1, null FROM dual」のようなものは null 値を返します。

私はこれについて数時間頭を悩ませてきました。何がうまくいかないのか、あなたの誰かが私にいくつかの指針を与えることができることを願っています.

少し早いですがお礼を!

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
}

出力がまったく得られない場合は、マイケルが示唆するように実際に error_reporting をオンにする必要があります。

これは PL/SQL ステートメントではなく SQL ステートメントであるため、実際にはエラーが発生するため、セミコロンを追加しないでください。

これは、PHPドキュメントがそれについて述べていることです:

SQL ステートメントは、セミコロン (";") で終わらないようにしてください。PL/SQL ステートメントは、セミコロン (";") で終了する必要があります。

于 2013-01-09T16:25:22.300 に答える