簡體   English   中英

COUNT 查詢給出錯誤結果

[英]COUNT query giving wrong results

我有下表attendance

+--------------------------------+
| rollno | sub | date | presenty |
+--------------------------------+

它目前沒有任何行。 我想添加具有相同rollnosubdatepresenty值的唯一行。 如果任何新條目都帶有相同的憑據,那么我想向用戶顯示一條警報消息。 否則,應創建新條目。 我寫了以下代碼:

$rollno = $_POST['rollno'];
$subject = $_POST['subject'];
$date = $_POST['date'];
$presenty = $_POST['presenty'];
$date_tmp = date_create($date);
$date_new = date_format($date_tmp, "d-m-Y");

$q = $conn->prepare("SELECT COUNT(`presenty`) FROM `attendance` WHERE `rollno` = ? AND `sub`=? AND `date`=?");
$q->bind_param("sss",$rollno,$subject,$date);
$q->execute();
$q->bind_result($pres);
$q->fetch();
$rows= $q->num_rows;
$q->close();
if($rows == 0){
    $insrtqry = $conn->prepare("INSERT INTO attendance(rollno, sub, date, presenty) VALUES(?,?,?,?)");
    $insrtqry->bind_param("ssss",$rollno, $subject, $date_new, $presenty);
    if($insrtqry->execute()){ ?>
        echo "Record Inserted Successfully";
    } else {
        echo "Record not added";
    }
} else {
    echo "Record already exists";
}

但是,即使表中沒有條目,當我嘗試插入新記錄時,計數查詢也會返回 1,然后執行 else 部分。 問題是什么? 請幫忙。

問題是你不能在這里使用 num_rows 因為 count 總是返回一些東西。 因此,您將始終將 num_rows 設為 >0,因此對於計數,您應該使用 bind_result 方法。

mysqli_stmt::bind_result -- mysqli_stmt_bind_result -- 將變量綁定到准備好的語句以存儲結果。 將結果集中的列綁定到變量。 當調用 fetch() 來獲取數據時,MySQL 客戶端/服務器協議將綁定列的數據放入指定的變量 var1, ....

      $rollno = $_POST['rollno'];
$subject = $_POST['subject'];
$date = $_POST['date'];
$date = date('Y-m-d',strtotime($date));
$presenty = $_POST['presenty'];

$q = $conn->prepare("SELECT COUNT(`presenty`) FROM `attendance` WHERE `rollno` = ? AND `sub`=? AND `date`=?");
$q->bind_param("sss",$rollno,$subject,$date);
$q->execute();
$q->bind_result($cnt);
$q->fetch();
$q->close();
if($cnt == 0){
    $insrtqry = $conn->prepare("INSERT INTO attendance(rollno, sub, date, presenty) VALUES(?,?,?,?)");
    $insrtqry->bind_param("ssss",$rollno, $subject, $date, $presenty);
    if($insrtqry->execute()){
        echo "Record Inserted Successfully";
    } else {
        echo "Record not added";
    }
} else {
    echo "Record already exists";
}

有關更多詳細信息,您可以查看如何使用 bind_result 與 get_result 的示例他們有關於使用 get_result 的精彩詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM