Jul3(3):PEAR::DB(4)
while($array = $pear_str1 -> fetchrow(DB_FETCHMODE_ASSOC)){ $key = $array["prefid"]; $pref_array["$key"] = $array["pref"]; }
とあるけども、いちいちこの結果セットを1行ずつまわさないでも、すぐに配列として入れてくれる関数があるという。これを探す。
ちなみにget○○らしい。なので、連想配列でキーを指定するDB_FETCHMODE_ASSOCをオプションに指定して、色々なgetを試してみる。
DB_common::getAll()
指定したクエリを実行し、入れ子になった配列に結果セット全体を格納したあとで 結果セットを開放。
以下のようなスクリプトを実行してみた。
$db_connect->setfetchmode(DB_FETCHMODE_ASSOC); $pref_array =$db_connect -> getall("select * from pref") ; if(DB::iserror($pref_array)){ exit($db_connect -> getmessage()); } var_dump($pref_array);
実行結果は・・・・
array(47) { [0]=> array(2) { ["prefid"]=> string(1) "1" ["pref"]=> string(9) "北海道" } [1]=> array(2) { ["prefid"]=> string(1) "2" ["pref"]=> string(9) "青森県" } [2]=> array(2) { ["prefid"]=> string(1) "3" ["pref"]=> string(9) "岩手県" } [3]=> array(2) { ["prefid"]=> string(1) "4" ["pref"]=> string(9) "宮城県" } [4]=>・・・
と、whileでまわさなくとも勝手に取ってきてくれた。ただ配列の中に配列がある入れ子構造になっているので、この場合はなんとなく不便そうだ。
続いて、
DB_common::getASSOC()
指定したクエリを実行し、連想配列に結果セット全体を格納したあとで 結果セットを開放。以下公式サイトより、
結果セットにのカラム数が 2 つより多い場合は、2 番目のカラムから 最後のカラムまでの値の配列が、連想配列の値として返されます。 結果セットのカラム数が 2 つのみの場合は、2 番目のカラムの値を持つ スカラ値が、連想配列の値として返されます (パラメータ $force_array で、強制的に 配列を返すようにしている場合を除きます)。
上のスクリプトのgetallをgetassocに変えて、実行してみた。
array(47) { [1]=> string(9) "北海道" [2]=> string(9) "青森県" [3]=> string(9) "岩手県" [4]=> string(9) "宮城県" [5]=> string(9) "秋田県" [6]=> string(9) "山形県" [7]=> string(9) "福島県" [8]=> string(9) "茨城県" [9]=> string(9) "栃木県" [10]=> string(9) "群馬県" [11]=> string(9) "埼玉県" [12]=> string(9) "千葉県" [13]=> string(9) "東京都" [14]=> string(12) "神奈川県" [15]=> string(9) "新潟県" [16]=> string(9) "富山県" [17]=> string(9) "石川県"・・・
prefidがキー値になっていてprefがその値に対応しているので、すぐに使える。一応これが今一番使える形になっている。
続いて
DB_common::getOne()
指定したクエリを実行し、結果の最初の行・最初のカラムのデータを返したあとで 結果セットを開放。
なんとなく結果が見えているか。一応実行してみると・・。
>||
string(1) "1"
|