2014-12-28 4 views
5

mysqli 문을 닫아야합니까?

문제


동일한 전화 번호와 날짜의 등록이있는 경우 계산을하려고합니다. 이는 같은 날짜 (시간)에 두 예약을 등록하지 못하도록하기위한 것입니다. 내 문제는 데이터베이스에 동일한 세부 정보가 등록되어 있지 않기 때문에 쿼리가 0을 반환 할 것으로 기대한다는 것입니다. 결과는 1입니다. 어떤 정보가 이미 데이터베이스에 있음을 나타내지 만 그렇지 않습니다. 내 생각 엔 현재 쿼리 이전에 실행중인 쿼리와 관련이 있다는 것입니다. 내가 성명을 닫아야하는지 궁금 하네. 내가 문 $stmt->close()을 종료하지만 아무 소용에 노력했다
노력이 무엇

. 나는 이전 쿼리의 변수를 재사용하는 대신 새로운 변수를 만들려고했지만 그 중 하나는 작동하지 않았다. 나는 거기에 같은 세부 사항으로 등록이 없는지 확인하기 위해 데이터베이스를 3 번 ​​검사했고, 나는 데이터베이스에 아무 것도 없다고 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 [email protected] 2014-12-28 17:00:00 1 

오류를


오류가 없습니다.

+0

'number = 0612345678'은'int'가 다른 소수 값으로 변환 될 것입니다. –

+4

'$ statement-> fetch()'는 부울 true를 반환하고 1로 평가됩니다. 아마도'store_result()'와'bind_result()'를 원할 것이다. http://php.net/manual/en/mysqli-stmt.bind-result.php –

답변

2

mysqli_stmt_fetch은 성공시 true을 반환합니다. 검색에 성공하면 쿼리는 항상 하나의 행만 반환합니다 (COUNT을 요청하고 있기 때문에 한 행에 원하는 값이 포함되어 있음).

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

반환 된 행의 값을 결정할 때 바인드 된 변수 $count을 사용해야합니다. (참고 : $row 변수는 필요 없습니다.)

+0

예, 그게 전부였습니다. mysqli로 처음으로 일하면서 내가 어딘가에서 찾은 잘못된 코드를 사용하게되었다. PDO에 붙어 있어야합니다;) 건배. – Bono

+0

이것은 하나의 행을 반환 할 것이기 때문에 'while'을'if'와 바꾸는 것이 더 낫습니다. – halfer

+0

@halfer 동의합니다. (일반적으로 가능한 한 적은 코드로 변경하려고하는데, 'while'은 mysqli_stmt_fetch의 대부분의 경우 "관습 적"이다.) –

관련 문제