php mysqli_assoc mysqli fetch_all() non è una funzione valida?



result-> fetch_row() (8)

Grazie alle risposte ho capito che non sono in grado di usare fetch_all() perché sto usando PHP 5.2.17 - fetch_assoc con while loop lavorato.

La funzione che sto usando fetch_all sta tornando con questo errore:

Errore irreversibile: chiamata al metodo non definito mysqli_result :: fetch_all () in

$mysqli = new mysqli($host, $username, $password, $database);
$query = "LONG QUERY that works, tested in phpmyadmin"
$result = $mysqli->query($query);
$result->fetch_all(); or  $mysqli->fetch_all() tried both
mysqli_fetch_all() was already tried.
$mysqli->close(); 

Sono in grado di connettermi al DB e ho tirato singole righe. Quando inserisco la query in PHPMYADMIN ottengo 5 righe indietro.

Funziona anche questa funzione? C'è un modo per posizionare i miei dati in un array associato da solo?


function runQuery($query) {
        $result = mysqli_query($this->conn,$query);
                $resultset  = array(); //you need to define array
                         while($row=$result->fetch_assoc()) {
                              $resultset[] = $row; //then insert result into the array
            }       
            if(!empty($resultset))
            {

            return $resultset;}
            else{return 'empty';};
    }

In aggiunta alla risposta di Fabrizios, ti preghiamo di considerare di costruire il tuo array con un loop:

$array = array();
while($row = $result->fetch_assoc())
    $array[] = $row;

Il modo tipico per costruire un array associativo è in un ciclo while :

$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
  $results_array[] = $row;
}


Avevo 5,6 ma non ha funzionato per me comunque. Abilitando il driver mysqlnd ha funzionato per me. Basta scrivere apt-get install php5-mysqlnd quindi riavviare php e sei a posto!


Uso

testo forte $rows = mysqli_fetch_array($result, MYSQLI_ASSOC);

per ottenere lo stesso risultato di $rows = mysqli_fetch_all($result, MYSQLI_ASSOC); se non vuoi iterare usando la risposta di Karolis .

È possibile cambiare costante in MYSQLI_NUM o MYSQLI_BOTH . Questo parametro opzionale è una costante che indica quale tipo di array deve essere prodotto dai dati della riga corrente.

Usando la costante MYSQLI_ASSOC questa funzione si comporterà in modo identico a mysqli_fetch_assoc (), mentre MYSQLI_NUM si comporterà in modo identico alla funzione mysqli_fetch_row (). L'opzione finale MYSQLI_BOTH creerà un singolo array con gli attributi di entrambi. http://php.net/manual/en/mysqli-result.fetch-array.php


Solo per aggiungere una nota aggiuntiva sul driver mysqlnd : deve anche avere l'estensione API mysqli installata. Senza l'estensione, fetch_all() non sarà ancora disponibile. Ho trovato questo durante la risoluzione dei problemi perché il mio codice ha funzionato su un server ma non su un altro, entrambi PHP> 5.3. Utilizzare phpinfo() per verificare le estensioni installate.


Questa funzione è disponibile da PHP 5.3.0. Forse la tua versione è più vecchia. Usa invece fetch_assoc() .

while ($row = $result->fetch_assoc()) {
    // do what you need.
}




mysqli