MDB2のお勉強
今どきMDB2なんか使われてないと思うのですが、問題として出てくるので覚えなくてはなりません。
PHPの歴史を勉強していると思って頑張ります。
6-3 SQL文の実行に関する問題
INSERT文、UPDATE文、DELETE文を実行した場合は結果セットは生成されない。「作用した行数」は得られる。
6-8 MDB2におけるSELECT文の結果取得方法に関する問題
MDB2クラスのqueryOne()
メソッドはSELECT文を実行し、結果の1行目、1列目の値を取り出す。
MDB2クラスのqueryRow()
メソッドはSELECT文を実行し、結果の最初の行を取り出し返す。
MDB2クラスのqueryCol()
メソッドはSELECT文を実行し、結果の列の値を配列にして返す。
MDB2クラスのqueryAll()
メソッドはSELECT文を実行し、結果を2次元配列で返す。
queryRow、queryAllにはフェッチモードを渡せる。
フェッチモードが何のかよくわかっていない。
MDB2_FETCHMODE_ORDERED → 結果セットの列と同じ並び順のインデックス配列
MDB2_FETCHMODE_ACCOC → 結果セットの列名をキーとする連想配列
MDB2_FETCHMODE_OBJECT → 結果セットの列名をフィールドとするstdClassのインスタンス
queryOne、queryRow、queryCol、queryAllの使用例
<?php require_once('MDB2.php'); $db = MDB2::connect('mysql://localhost/test') //testDBなのでID、PASS省略 $db->exec('DROP TABLE IF EXISTS t'); $db->exec('CREATE TABLE t (a INT b INT)'); $db->exec('INSERT INTO t VALUE (1, 10), (2, 20)'); echo "queryOne()"; echo $db->queryOne('SELECT b FROM t WHERE a = 1'); echo "\nqueryRow()"; print_r($db->queryRow('SELECT * FROM t WHERE a =1')); echo "\nqueryCol()"; print_r($db->queryCol('SELECT a FROM t')); echo "\nqueryAll()"; print_r ($db->queryAll('SELECT * FROM t'));
出力結果 queryOne(): 10 queryRow(): Array ( [0] => 1 [1] => 10 ) queryCol(): Array ( [0] => 1 [1] => 2 ) queryAll(): Array ( [0] => Array ( [0] => 1 [1] => 10 ) [1] => Array ( [0] => 2 [1] => 20 ) )