iT邦幫忙

DAY 21
3

遭遇PHP之經驗分享系列 第 21

[鐵人賽Day21]判斷資料庫回傳是否有資料(使用mysql_num_row來處理)

最近,處在十分生疏的情況下,再度接觸程式,遇到了一個小問題...(今天就讓我發一篇超新手文吧!確實我還在新手村打轉啊!!)
這個小問題與「[鐵人賽Day9]計算MySQL資料庫回傳資料筆數」有關聯到,既然那邊沒有範例,這篇就當那篇的範例好了。

表單填寫沒有在資料庫的資料,要是沒有存在,則顯示「XXX名稱可以使用」,要是存在則顯示「XXX名稱已被使用」
就當我在測試表單送出去驗證時,雖然出現正常的回覆訊息,但同時出現了一行錯誤訊息
示範程式碼如下,以$input_name為表單送來的資料:
「mysql_nums.php」

<?php
    $input_name="TEST";

    mysql_connect("127.0.0.1","root","");
    mysql_select_db("ithome_test");
    $sql="SELECT * FROM `good_idea` WHERE `name`='$input_name'";
    $result=mysql_query($sql);
    while($row=mysql_fetch_array($result)){
        $db_name=$row['name'];
    }
    if($input_name==$db_name){
        echo $input_name."名稱已被使用";
    }else{
        echo $input_name."名稱可以使用";
    }
?>

輸出結果如圖示:

意思是說db_name變數沒有被定義,但到底是因為什麼呢...?!
把$sql內的語法直接拿過去phpMyAdmin內執行,發現MySQL回傳的竟然是空的查詢結果,難怪$db_name找不到值

那該怎麼處理這個小Bug呢...
突然想到,要是回傳的結果為空,那代表筆數等於0
那就用筆數去判斷就好啦,想到用先前介紹過的mysql_num_rows函數

那就把函數加進去應用,就可以去判斷資料庫有沒有回傳資料了(約在以下程式碼第8~9行)
同時,也因為這樣錯誤訊息也排除了,不會再因為回傳空值而無法定義變數了
示範程式碼如下:
「mysql_nums.php」

<?php
    $input_name="TEST";

    mysql_connect("127.0.0.1","root","");
    mysql_select_db("ithome_test");
    $sql="SELECT * FROM `good_idea` WHERE `name`='$input_name'";
    $result=mysql_query($sql);
    $nums=mysql_num_rows($result);
    if($nums > 0){
    while($row=mysql_fetch_array($result)){
        $db_name=$row['name'];
    }
        if($input_name==$db_name){
            echo $input_name."名稱已被使用";
        }
    }else{
        echo $input_name."名稱可以使用";
    }
?>

上一篇
[鐵人賽Day20]PHP表單搭配PHPMailer寄信-使用Gmail寄出
下一篇
[鐵人賽Day22]計算程式執行過程的時間
系列文
遭遇PHP之經驗分享30

尚未有邦友留言

立即登入留言