문제

나는 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top