プログラミングは面白い

プログラミングの事を中心に色々書いていきます

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