COUNT个查询给出错误的结果

时间:2019-10-31 12:10:36

标签: php mysql

我有下表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";
}

但是,即使表中没有任何条目,当我尝试插入新记录时,count查询也会返回1并执行else部分。问题是什么?请帮忙。

1 个答案:

答案 0 :(得分:0)

问题是您不能在此处使用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";
}

有关更多详细信息,您可以检查,Example of how to use bind_result vs get_result他们提供了有关使用get_result的出色详细信息