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"
|