2013年6月22日 星期六

判斷 MySQL 是否找到紀錄的方法

在 mysql.php 函式庫中, 可以用 search() 或 run_sql() 函式去資料表撈資料, 例如 :

$SQL="SELECT * FROM `report` WHERE `date_time` LIKE '".$today."%'";
$RS=run_sql($SQL);

或者 :

$RS=search("apps","app_name",$app_name);

這些都會呼叫 PHP 原生的 mysql_query() 函式執行 SQL 指令, 然後以 mysql_numrows()  函式取得資料筆數, 作為迴圈的終值, 在每個迴圈內呼叫 mysql_fetch_array() 取得每筆資料的一維關聯式陣列 (用欄位名稱當索引), 再把此陣列存入一個索引陣列中.

         $result=mysql_query($SQL, $conn); //執行 SQL 指令
         for ($i=0; $i<mysql_numrows($result); $i++) {
               $RS[$i]=mysql_fetch_array($result);
               } //end of for
         if (mysql_error($conn)) {return $result;}
         else {return $RS;}

所以如果有找到一筆紀錄, 則最後傳回來的是一個二維陣列, 例如第一筆的 id 欄位為 $RS[0]["id"]. 如果沒找到任何紀錄的話, 預設傳回 FALSE (即 mysql_query 的傳回值), 除錯模式則會傳回錯誤原因字串, 例如 "MySQL SELECT Error : ......".
所以, 要如何判斷有沒有撈到資料呢? 有兩個辦法 :
  1. 用 is_array() :
    if (is_array($RS)) {....}
    else {....}
  2. 用 sizeof() :
    if (sizeof($RS)!=0) {...}
    else {...}
如果有找到紀錄, 則傳回值 $RS 必定是二維陣列, is_array() 就傳回 TRUE, 而 sizeof() 傳回撈到的資料筆數 (所以要計算筆數除了用 count($RS) 外, 也可以用 sizeof($RS)).

沒有留言 :