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

Kan ikke få antallet af rækker og hente ved brug af MySQLi forberedt sætning

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 ):




  1. Bedste praksis for bitflag i PHP

  2. Gem accenter i MySQL-databasen

  3. Python:MySQLdb og bibliotek er ikke indlæst:libmysqlclient.16.dylib

  4. PHP og MySQL mindste og størst mulige dato