• ベストアンサー

空フィールドが表示されない

A B C ----- 1 2 1 2 2 3 のようなテーブルを $strSQL = "select A,B,C from XXX"; $parsed = oci_parse( $db , $strSQL ); oci_execute($parsed); $data = oci_fetch_array($parsed, OCI_BOTH ); というコードから参照しようとすると、 Aの値のみしか参照されません。 DB上にデータある場合は、BもCも取得できます。 NULL値も参照するようにするには、どうすればよいのでしょうか?

  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • syuuiwsd
  • ベストアンサー率56% (17/30)
回答No.3

度々すみません、いい忘れたことがあります。 複数のstatement identifierを同時に設定するのに「+」で連結します。 $data = oci_fetch_array($parsed, OCI_BOTH + OCI_RETURN_NULLS );

w0a15455
質問者

お礼

お二人ともありがとうございました。 OCI_RETURN_NULLS があるのを知りませんでした。 解決です^^

その他の回答 (2)

  • syuuiwsd
  • ベストアンサー率56% (17/30)
回答No.2

すいません、さっきの話は多分間違いました。 $data = oci_fetch_array($parsed, OCI_BOTH ); の二番目の引数を、OCI_RETURN_NULLSで試したら? ご参考になればうれしいです。

参考URL:
http://jp.php.net/manual/zh/function.oci-fetch-array.php
  • syuuiwsd
  • ベストアンサー率56% (17/30)
回答No.1

foreach( $data as $drow ) { <...> if( $drow['B']==NULL ) echo "&nbsp;"; else echo $drow['B']; <...> } のように書けばだめですか? Oracle未経験ですから間違ったら許してください

関連するQ&A

  • 一つのカラムから、データを分けて取り出す方法

    現在、PHP4とMysql4.1の環境を利用しています。 カラムからのデータ抽出で、うまくいきません。 例えば、カラムに次のような形でデータがあった場合、それをカンマで区切って別々に抽出し、かつ重複を除いてブラウザに表示させるにはどのような方法があるでしょうか。 +-------------+ | A,B,C,A,B,C | +-------------+ 上記配列をDBからmysql_fetch_arrayで取得し、 その後splitして、printしましたが、 ブラウザ上では「array」と表示されてしまいました。 何か方法がありましたら、 ご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • phpからoracle関数を使ってコミットしようとしたのですが・・・

    oracleDBのテーブルからデータを一件削除しようと試みたのですが、oci_execute()の行で Warning: oci_execute() [function.oci-execute]: ORA-00928: SELECTキーワードがありません というエラーが発生してしまいます何が原因でしょうか? ソースはこんな感じです。 $query="(DELETE FROM store_mst where 店舗コード=11)"; $stid=oci_parse($conn,$query); if(!$stid){ $e=oci_error($conn); print htmlentities($e['message']); exit; } $r=oci_execute($stid,OCI_DEFAULT); if(!$r){ $e=oci_error($conn); print htmlentities($e['message']); exit; } $cmit=oci_commit($conn); if(!$cmit){ $e=oci_error($conn); print htmlentities($e['message']); exit; }

    • 締切済み
    • PHP
  • フィールド名(フィールド自体)の並び替えについて

    Access初心者です。 Accessに詳しい人が作ったDBをちょっといじって 使いやすくしたいのですが、方法が分からず困っています。 そのdbはクエリを使ってフォームを作っているのですが、 フォームを開くと、 A__|B__|C__| ←フィールド名 ***|***|***| ←データ と、テーブルのような表が実行されます。 これのフィールド自体の順番を変更したいのですが、 A__|B__|C__| ←フィールド名 ***|***|***| ←データ ↓ A__|C__|B__| ←AとBの間にCを入れる ***|***|***| どこをいじればよいかが分かりません。 フォームをデザインビューで開くと、 フォームを実行した時とは全く異なるビューが表示されます。 ご教授の程、宜しくお願い致します。

  • OCILogonとOra_Logonの違いなど

    毎度お世話になります。まさいちです。 質問なんですが、、、というより教わりたいんですが、 phpではOCILogonとOra_Logon両方で DBにアクセスできるみたいですけど、OCIとOraって何が違うんでしょう!? 他にもparse exec fetchなどみんな両方ともあって、なんの意味が あるんだろう?? と疑問を持っています。 暇な方おりましたらテキトーに答えてやってください。 では。

    • ベストアンサー
    • PHP
  • mysql結果を使ってもう1度mysql検索

    DB(mysql)とプログラムが以下のようにあります。 <?php /////////////////テーブルAを検索//////////////////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where day = 0601",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"blue\">$myrow[name]$myrow[day]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ////////結果を使ってテーブルAをもう1度検索///////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where sports = '$myrow[day]'",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"green\">$myrow[mise]$myrow[name]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ?> テーブルA name | day | sports | A君 | 0511 | バスケット | A君 | 0601 | サッカー | B君 | 0601 | テニス | B君 | 0503 | 水泳 | C君 | 0602 | 競歩 | C君 | 0512 | 乗馬 | dayが0601のA君とB君のsports全部を結果として表示したいのですが、エラーが出たりして思ったようにはできませんでした。 $resultなどが重複してしまうらしいのです。 A君 「バスケット・サッカー」 B君 「テニス・水泳」 と、するにはどうすればいいのでしょうか?よろしくお願いしますm(_ _)m

    • 締切済み
    • PHP
  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • "カレントレコードがありません"とでてきます

    Access97を使用しています。 データは テーブルAの項目B、項目Cが下記のようにあるとします。 フォーム上のText"B"に項目Bを入力します。 項目B 項目C 11 a 11 b 22 aa 22 bb 22 cc 33 aaa 33 ccc この時 Set DB = CurrentDb() strSQL = "SELECT * FROM A WHERE " strSQL = strSQL + "B='" & Me.B & "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) RS.MoveFirst RS.MoveLast m = RS.RecordCount For i = 1 To m COIL_N = RS.Fields("C") Call RS.MoveNext Next i 上記のようなモジュールですが、例えば 項目Bの"11"を選んだ時、項目Cの二番目のデータbが 取得できません。 "カレントレコードがありません"とでてきます。何故でしょうか?

  • 変数に入った値を追加したい

    Access97を使用しています。SQLで変数に入った値を追加したいのです。 Dim strSQL, NO3, NO2 As String Dim i As Integer Dim db As DATABASE Dim SN As Variant If (C_Flag = 0) Then SN = 0 Else SN = 1 End If strSQL = "INSERT INTO 連続印刷 (Nフラグ" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "', 'SN'" strSQL = strSQL & ")" Set db = CurrentDb() db.Execute strSQL Set db = Nothing End Sub 上記のようにすると、"SN"のデータが入ります。 'SN'をSNのようにすると、パラメータが少なすぎますと出てきます。 どうすれば、上記 0や1の値を取得することができるのでしょうか?

  • どちらが速いのか?mysql_num_rows

    どちらの処理が早くなりますか?またメモリの使用量はどちらが優れているのでしょうか? また、方法Bのクエリ実行は2回だと思いますが、方法Aはクエリの実行は一回と考えてもいいのでしょうか? PHPとMySQLの環境です。 また、評価のやり方も教えて頂ければ大変ありがたいです。 ■方法A $q = "SELECT key, a, b, c FROM d WHERE a < 1 AND b > 1 ORDER BY c"; $rs = mysql_query ($q); $row_num = mysql_num_rows ($rs); while ($data = mysql_fetch_array ($rs)) { echo $data[key] . $data[a] . $data[b] . $data[c]; } ■方法B $q_c = "SELECT COUNT(key) AS count FROM d WHERE a < 1 AND b > 1"; $rs = mysql_query ($q_c); $data = mysql_fetch_array ($rs); $row_num = $data[count]; $q = "SELECT key, a, b, c FROM d WHERE a < 1 AND b > 1 ORDER BY c"; $rs = mysql_query ($q); while ($data = mysql_fetch_array ($rs)) { echo $data[a] . $data[b] . $data[c]; } 是非宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Access97 SQLでINSERT されない

    Access97を使って下記のようなモジュールを作成しました。  が、接続DAT にはデータが追加されません。  何故でしょうか?   j = 10 i = 1 strSQL = "" Do Until i = j JIJI = JI(i) strSQL = "INSERT INTO 接続DAT (重複ID,区別記号" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "'" & JIJI & "'" strSQL = strSQL & ", '" & D & "'" strSQL = strSQL & ")" Set DB = CurrentDb() DB.Execute strSQL Set DB = Nothing Set RS = Nothing i = i + 1 Loop

専門家に質問してみよう