平常使用 MySQL 函式庫查詢資料表時, 如果有查到資料, 則 run_sql() 會傳回一個二維陣列, 第一維是數字索引, 表示各列資料 (即每一筆紀錄就是一個一維陣列); 第二維是以各欄位名稱為索引的關聯陣列, 所以只要用 is_array(), count() 函式配合迴圈就可以取得資料庫的傳回值 :
$SQL="SELECT * FROM users";
$RS=run_sql($SQL);
if (is_array($RS)) { //或 count($RS)!=0, sizeof($RS)!=0
for ($i=0; $i<count($RS); $i++) {
echo $RS[$i]["name"];
}
}
$RS=null;
如果只有一列傳回值, 當然只要用 $RS[0]["name"] 即可取得.
但昨天在寫 KD 的計算時卻遇到了這個問題 : 若 SQL 用到統計用的聚合函數, 該怎麼取得傳回值呢? 例如計算 KD 時須先找出近 9 日收盤最低價與最高價, 參考 :
# 計算 KD 值的方法
$SQL="SELECT MAX(close) FROM ".$table." ORDER BY trade_date DESC LIMIT 9";
$RS=run_sql($SQL);
照理說最大值 MAX 與最小值 MIN 傳回的應該是一個值, 而不是一群值, 不過 run_sql() 仍然是傳回了一個二維陣列, 用 var_dump() 即可顯示其結構如下 :
var_dump($RS);
array(1) { [0]=> array(2) { [0]=> string(4) "82.5" ["MAX(close)"]=> string(4) "82.5" } }
因此可以用下列兩種方式取得傳回值 :
$max=$RS[0][0]; //建議用這個較簡單
或
$max=$RS[0]["MAX(close)"]; //忘了吧
當然其他的聚合函式如 COUNT 用法也是一樣.
沒有留言:
張貼留言