Hvis du vil bruge mysqli_stmt::$num_rows
(det vil sige, tjek antallet af rækker på den forberedte erklæring), du skal bruge $stmt->store_result()
efter at have udført den forberedte sætning, før man kunne kontrollere antallet af rækker. Det betyder, at resultatet gemmes i hukommelsen, før vi tjekker, hvor mange rækker der blev returneret.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
// ...
Men hvis du vil bruge mysqli_result::$num_rows
(på MySQLi-resultatet konverterer du fra sætningsresultatet), skal du gøre det efter at have gjort $result = $stmt->get_result();
, og brug $result->num_rows;
, som vist nedenfor.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
while ($row = $result->fetch_assoc()) {
// ....
I sidste ende skulle de begge ende med at gøre det samme - angiv et antal af de rækker, der returneres af den oprindeligt forberedte forespørgsel.
Bemærk
Det er vigtigt at bemærke, at du ikke kan bruge store_result()
og get_result()
på samme udsagn. Hvilket betyder, at du i det første eksempel ikke kan konvertere til et mysqli-result objekt (ved at bruge get_result()
, som giver dig mulighed for at bruge standarden fetch_assoc()
metode). Som store_result()
gemmer resultatet i hukommelsen, er der intet for get_result()
at konvertere og omvendt.
Dette betyder, at hvis du bruger store_result()
, skal du hente gennem statement-fetch, mysqli_stmt::fetch()
og bind resultaterne gennem mysqli_stmt::bind_result()
. Hvis du bruger get_result()
, bør du kontrollere antallet af rækker på det resulterende MySQLi-resultatobjekt (som vist i det andet eksempel).
Du bør derfor konstruere din kode, så du kun behøver at bruge én af dem.
Når det er sagt, ved hjælp af affected_rows
som foreslået i kommentarerne, er det ikke det rigtige værktøj til opgaven - som i manualen på mysqli_stmt::$affected_rows
(det samme gælder for en almindelig forespørgsel, mysqli::$affected_rows
):
- PHP.net på
mysqli_stmt::store_result()
- PHP.net på
mysqli_stmt::get_result()
- PHP.net på
mysqli_stmt::$num_rows