mysqli_statement :: NUM_ROWS () gee terug Die verkeerde waarde
Vra
Ek is die skryf van 'n databasis hanteerder klas in PHP met behulp van die mysqli klas en bereid state. Ek het probeer om uit te druk die resultaat. Dit het nie reg van die kolf af werk so ek besluit om 'n paar debugging doen. Ek het probeer om die num_rows()
metode gebruik van die mysqli_statement
klas, maar dit het sy terugkeer 0. het ek besluit om 'n klein gedeelte van toets-kode skryf om te hou dit eenvoudiger sodat ek kon sien wat verkeerd gaan. Ek was toe in staat is om die data wat ek wou terugkeer nie, maar die num_rows()
metode nog terugkeer 0 selfs wanneer dit eintlik is te kies en te herwin sommige data. Hier is die kode:
$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();
}
So ja, verwagte resultaat is:
1name
En werklike resultaat is:
0name
Kan iemand my vertel waarom dit?
Oplossing
Ek wonder of NUM_ROWS () is berig relatief tot die huidige resultset. Probeer vas te lê NUM_ROWS () voor haal die data. Bv.
if($statement->prepare($query))
{
$statement->execute();
$statement->store_result();
echo $statement->num_rows();
$statement->bind_result($name);
$statement->fetch();
echo $name;
}
Maak dit enige effek hê?
Ander wenke
NUM_ROWS is nie 'n metode, dit is 'n eiendom.
Dit lyk nie soos jy $ naam het verklaar.
Ook, probeer die verwydering van bind_result () haal () so dit lees iets soos hierdie:
$statement->execute();
$statement->store_result();
printf("Number of rows: %d.\n", $statement->num_rows);