你需要关闭mysqli语句吗?

时间:2014-12-28 18:58:45

标签: php mysqli

问题


我正在尝试计算是否有相同电话号码和日期的注册。这是为了防止人们在同一日期(时间)登记两个预订。我的问题是我希望查询返回0,因为没有在数据库中注册相同的详细信息。但结果是1。这表明数据库中已存在具有相同信息的内容,但没有。我的猜测是它与我在当前查询之前执行的查询有关。我想知道我是否应该尝试结束声明。

我尝试了什么


我试过关闭声明$stmt->close(),但无济于事。我尝试创建新变量而不是重复使用上一个查询中的变量,但这也不起作用。我对数据库进行了三重检查以确保没有相同的详细信息在那里进行注册,并且我100%确定数据库中没有任何错误。

代码


这是我的代码。我认为问题出现在第一个查询部分。

$query = "SELECT count(*) as reservation_amount FROM reservation WHERE `date`= ?";
$stmt = $db->prepare($query);
$stmt->bind_param("s", $datetime);
$stmt->execute();
$stmt->bind_result($count);
while($row = $stmt->fetch()){
    $res_count = $row; //res_count is 1 in this case. I'm thinking I need to close something here?
}

$query = "SELECT count(*) as registered FROM reservation WHERE `number` = ? and `date`= ?";
$stmt = $db->prepare($query);
$stmt->bind_param("is", $number, $datetime);
$stmt->execute();
$stmt->bind_result($count);
while($row = $stmt->fetch()){
    $registered = $row; //outputs 1 but I'm expecting 0
}

输入


datetime = 2014-12-28 17:00:00
number = 0612345678

数据库


该数据库包含以下记录:

id  name    surname number  email           date                amount
5   Henk    Houtman 9060666 henk@houtman.nl 2014-12-28 17:00:00 1

错误


没有错误。

1 个答案:

答案 0 :(得分:2)

mysqli_stmt_fetch会在成功时返回true。如果成功,您的查询将始终只返回一行(因为您要求COUNT,其中一行包含您正在寻找的值。

while($row = $stmt->fetch()){
    $registered = $count;
}

您应该使用绑定变量$count来确定返回行中的值。 (注意:您不需要$row变量。)