问题
我正在尝试计算是否有具有相同电话号码和日期的注册。这是为了防止人们在同一日期(时间)注册两个预订。我的问题是我希望查询返回
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
错误
没有错误。
mysqli_stmt_fetch
将在成功时返回true
。如果成功,您的查询将始终返回一行且仅返回一行(因为您正在请求一个COUNT
,其中一行包含您要查找的值)。
while($row = $stmt->fetch()){
$registered = $count;
}
您应该使用绑定变量$count
来确定返回行中的值。(注意:您不需要$row
变量。