上篇介紹了如何建立資料庫的連線
接著來說說MDB2的query部分,總共有query()和exec()兩種
成功會回傳結果,失敗則都會回 傳MDB2_Error訊息
差別在於query()是執行sql指令並取得值
exec()則是單純的執行指令,適用於 INSERT、UPDATE或DELETE
query()範例:
// Proceed with a query
$res = $mdb2->query('SELECT * FROM clients');
// Always check that result is not an error
if (PEAR::isError($res)) {
die($res->getMessage());
}
exec() 範例:
$sql = "INSERT INTO clients (name, address) VALUES ($name, $address)";
$affected = $mdb2->exec($sql);
// Always check that result is not an error
if (PEAR::isError($affected)) {
die($affected->getMessage());
}
另 外在查詢時一樣可以設定查詢的範圍及起點
$sql = "SELECT * FROM clients";
$mdb2->setLimit(20, 10); //回傳20筆資料,從第10筆資料後開始算起
$affected =& $mdb2->exec($sql);
$sql = "DELETE FROM clients";
if ($mdb2->supports('limit_queries') === 'emulated') {
echo 'offset will likely be ignored'
}
// only delete 10 rows
$mdb2->setLimit(10);
$affected =& $mdb2->exec($sql);
查詢時可以使用quote()提高資料存取的安全性, 例如:
$query = 'INSERT INTO sometable (textfield1, boolfield2, datefield3) VALUES ('
.$mdb2->quote($val1, "text", true).', '
.$mdb2->quote($val2, "boolean", false).', '
.$mdb2->quote($val3, "date", true).')';
quote() 函式只有第一個參數-值是需要的,後面的三個參數則是視需求使用
第二個參數是值的類別,可以排除設定類別外的值
允許使用的有text, boolean, integer, decimal, float, time stamp, date, time, clob, blob
第三個參數是是否使用quote(),即用引號包住值,false的話則只是單純的將值輸出
第四個參數則是使否要脫離萬用字元
善用quote()可以增加安全性
針對query出來的結果也可以調整表現的方式,例如:
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
setFetchMode() 有三種屬性
MDB2_FETCHMODE_ORDERED(例:$result[0])
MDB2_FETCHMODE_ASSOC(例:$result['name'])
MDB2_FETCHMODE_OBJECT(例:$result->name)
取得結果之後,接著就是要用函式來取出值
fetchOne(), fetchRow(), fetchCol() and fetchAll()這四個函式看起來就很容易懂
分別是取一個,取一行,取一列,取所有
此外 numRows(), numCols(), rowCount()等函式也可以獲取結果的其他資訊
除了以上處理過程外,也有函式可以幫助簡化撰寫,直接取得結果
就是queryOne(), queryRow(), queryCol() and queryAll()這四個對應的函式
以範例作比較,使用query():
$res = $mdb2->query("select ID,name,birthday from member");
while ($data = $res->fetchRow()) {
echo $data['ID'].','.$data['name'].','.$data['birthday'];
}
queryOne():
$res = $mdb2->queryOne("select count(*) from member");
if (!is_null($res)) echo $res;
queryRow():
$res = $mdb2->queryRow("select name,birthday from member where ID = 1");
if (!is_null($res)) echo $res['name'].','.$dbquery['birthday'];
依此類推,依需求選擇使用的函式
MDB2尚有預編譯及批量處理Prepare & Execute、moudle等好用功能沒提到
等之後有用到再去查技術手冊了
沒有留言:
張貼留言