Domanda

Stavo scrivendo una classe del gestore di database in PHP utilizzando la classe mysqli e le istruzioni preparate.Stavo tentando di stampare il risultato.Non ha funzionato subito, quindi ho deciso di fare un po' di debug.Ho provato a usare il num_rows() metodo da mysqli_statement class, ma continuava a restituire 0.Ho deciso di scrivere una piccola porzione di codice di test per semplificarlo e poter vedere cosa non andava.Sono stato quindi in grado di restituire i dati che volevo, ma il file num_rows() Il metodo restituisce comunque 0 anche quando sta effettivamente selezionando e recuperando alcuni dati.Ecco il codice:

$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();
}

Quindi sì, il risultato atteso è:

1name

E il risultato effettivo è:

0name

Qualcuno può dirmi perché è così?

È stato utile?

Soluzione

Mi chiedo se num_rows() stia segnalando rispetto al set di risultati corrente.Prova a catturare num_rows() prima di recuperare i dati.per esempio.

if($statement->prepare($query))
{
    $statement->execute();
    $statement->store_result();
    echo $statement->num_rows();
    $statement->bind_result($name);
    $statement->fetch();
    echo $name; 
}

Ha qualche effetto?

Altri suggerimenti

num_rows non è un metodo, è una proprietà.

Non sembra che tu abbia dichiarato $name.

Inoltre, prova a rimuovere bind_result() e fetch() in modo che venga letto qualcosa del genere:

$statement->execute();

$statement->store_result();

printf("Number of rows: %d.\n", $statement->num_rows);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top