Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否需要关闭mysqli语句?_Php_Mysqli - Fatal编程技术网

Php 是否需要关闭mysqli语句?

Php 是否需要关闭mysqli语句?,php,mysqli,Php,Mysqli,问题 我试图数一数是否有相同电话号码和日期的登记。这是为了防止人们在同一日期(时间)登记两个预订。我的问题是,我希望查询返回0,因为数据库中没有相同详细信息的注册。但是,结果是1。这将表明数据库中已经存在具有相同信息的内容,但没有。我猜这与我在当前查询之前执行的查询有关。我想知道我是否应该试着结束声明。 我试过什么 我已尝试关闭语句$stmt->close(),但无效。我试图创建新的变量,而不是重用上一个查询中的变量,但这也不起作用。我对数据库进行了三次检查,以确保没有使用相同详细信息的注册,

问题
我试图数一数是否有相同电话号码和日期的登记。这是为了防止人们在同一日期(时间)登记两个预订。我的问题是,我希望查询返回
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
}
输入

数据库
数据库包含以下记录:

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

成功后将返回
true
。如果成功,您的查询将始终只返回一行(因为您正在请求一个
计数
,其中一行包含您正在查找的值)


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

number=0612345678
is
int
将转换为其他一些十进制值
$statement->fetch()
返回布尔值true,计算结果为1。您可能希望
存储\u result()
绑定\u result()
。是的,就是这样。第一次使用
mysqli
导致我使用了我在某处发现的错误代码。应该坚持PDO;)干杯。因为这最多只能返回一行,所以如果我同意的话,将
while
换成
,会更整洁。(通常,我会尽量少更改代码。
在大多数
mysqli\u stmt\u fetch
的用例中也更“常规”)它只在循环上下文中是常规的。除此之外,这是非常错误的,尽管我同意人们无论如何都会使用它,因为他们在其他地方已经让它像那样工作了。
id  name    surname number  email           date                amount
5   Henk    Houtman 9060666 henk@houtman.nl 2014-12-28 17:00:00 1
while($row = $stmt->fetch()){
    $registered = $count;
}