sql >> Database teknologi >  >> RDS >> Mysql

mysqli forberedt sætning num_rows returnerer 0, mens forespørgslen returnerer større end 0

Når du udfører en sætning gennem mysqli, er resultaterne faktisk ikke i PHP, før du henter dem -- resultaterne holdes af DB-motoren. Så mysqli_stmt objekt har ingen måde at vide, hvor mange resultater der er umiddelbart efter udførelse.

Rediger din kode sådan:

$stmt->execute();
$stmt->store_result(); // pull results into PHP memory

// now you can check $stmt->num_rows;

Se manualen

Dette gælder ikke for dit specifikke eksempel, men hvis dit resultatsæt er stort, $stmt->store_result() vil forbruge meget hukommelse. I dette tilfælde, hvis det eneste, du bekymrer dig om, er at finde ud af, om mindst ét ​​resultat blev returneret, skal du ikke gemme resultater. i stedet skal du bare kontrollere, om resultatets metadata ikke er null:

$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;

Se manualen



  1. MySQL Error 1170 (42000):BLOB/TEXT-kolonne brugt i nøglespecifikation uden en nøglelængde

  2. SQLite Inner Join

  3. #1136 - Kolonneantal stemmer ikke overens med værdiantallet?

  4. Installer SQL Server 2016