mysqli_statement::num_rows()가 잘못된 값을 반환합니다.
문제
나는 mysqli 클래스와 준비된 명령문을 사용하여 PHP에서 데이터베이스 핸들러 클래스를 작성하고 있었습니다.결과를 출력하려고 했는데요.곧바로 작동하지 않아서 디버깅을 하기로 결정했습니다.나는 num_rows()
의 방법 mysqli_statement
클래스이지만 계속 0을 반환했습니다.나는 무엇이 잘못되었는지 확인할 수 있도록 테스트 코드의 작은 부분을 작성하여 더 단순하게 유지하기로 결정했습니다.그런 다음 원하는 데이터를 반환할 수 있었지만 num_rows()
메소드는 실제로 일부 데이터를 선택하고 검색하는 경우에도 여전히 0을 반환합니다.코드는 다음과 같습니다.
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if(mysqli_connect_errno())
{
die('connection failed');
}
$statement = $mysqli->stmt_init();
$query = "SELECT name FROM table WHERE id = '2000'";
if($statement->prepare($query))
{
$statement->execute();
$statement->bind_result($name);
$statement->fetch();
$statement->store_result();
echo $statement->num_rows();
echo $name;
}
else
{
echo 'prepare statement failed';
exit();
}
예, 예상 결과는 다음과 같습니다.
1name
실제 결과는 다음과 같습니다.
0name
왜 이런지 말해 줄 수 있는 사람 있나요?
해결책
num_rows()가 현재 결과 집합을 기준으로 보고하는지 궁금합니다.데이터를 가져오기 전에 num_rows()를 캡처해 보세요.예를 들어
if($statement->prepare($query))
{
$statement->execute();
$statement->store_result();
echo $statement->num_rows();
$statement->bind_result($name);
$statement->fetch();
echo $name;
}
그게 효과가 있나요?
다른 팁
num_rows는 메소드가 아니라 속성입니다.
$name을 선언하지 않은 것 같습니다.
또한, 다음과 같은 내용을 읽을 수 있도록 Bind_result() 및 fetch()를 제거해 보십시오.
$statement->execute();
$statement->store_result();
printf("Number of rows: %d.\n", $statement->num_rows);
제휴하지 않습니다 StackOverflow