為了降低資料庫Loading,此次採用先將資料全部取出存入陣列,再從陣列值判斷採用更新(Update)或是新增(Insert)的方式。
//SQL.......略 while (list($key, $value) = $stmt->fetch()) { $r[$key] = $value; }
從資料庫讀取到陣列後,陣列大約是長這樣。
Array
(
[A01] =>
[A02] => 我有值
........
..........略
)
看到有空值出現,當下就直接使用isset函數做判斷,但事實跟想法不同,遇到陣列為空值時,照理說應該是採用更新的方式,但實際卻做了新增資料。
if (isset($r["A01"])){ ......資料更新...... }else{ ......資料新增...... }
試了幾次都不能正常運作時,這時也沒再多做嘗試,直接到php手冊仔細看一下說明,說明開頭就寫isset是「檢測變量是否設置,並且不是NULL。」,看到"NULL"字樣,馬上就明白是怎麼一回事,接下來說明原因。
將陣列內容使用var_dump函數顯示出來。
var_dump($r);
array(2) {
["A01"]=>
NULL
["A02"]=>
string(9) "我有值"
}
果然鍵值"A01"是NULL,難怪isset沒辦法判斷,當下就放棄使用值(VALUE)來判斷,要使用鍵(KEY)做判斷。
if (array_key_exists("A01", $r)){ ......資料更新...... }else{ ......資料新增...... }
若是多維陣列,也可以使用array_keys配合in_array做判斷處理。
if (in_array("A01", array_keys($r))){ ......資料更新...... }else{ ......資料新增...... }
注意事項:
所謂的NULL指的是不存在任何屬性("\0"),一般常量宣告的空值「$r=""」不是NULL。