Utilizzare la funzione mysql_num_rows() in PHP 5

  • Creatore Discussione Creatore Discussione miagy
  • Data di inizio Data di inizio

miagy

Utente Attivo
2 Nov 2014
83
1
8
Ciao ragazzi,
solo per mera curiosità. Con le antiche versioni di PHP, ho sempre usato la funzione mysql_num_rows() di MySQL per conteggiare il numero di righe di un risultato. In base al risultato, le soluzioni erano 2.
Più nello specifico, la usavo in questo modo:

PHP:
$checkoff = mysql_num_rows(mysql_query("SELECT * FROM chat WHERE idchat = ".$_SESSION['idchat']." AND autore = '".$_SESSION['login']."'"));

if ($checkoff > 0) {
    
    //RISULTATO 1
    
} else {
    
    //RISULTATO 2
}

Adesso, in parte l'ho sempre odiato perché l'ho sempre reputato molto pesante per il server, (un loop che percorre ogni riga per contarle oggi sembra una follia).

Esiste un metodo più moderno (magari con un PHP 5.4) che possa alleggerire questa funzione seguendo la stessa logica?
 
In realtà la libreria mysqli esiste fin da php 5.0.0 devi adeguare il tuo codice nell'utilizzare tale libreria invece che la ormai deprecata e rimossa di mysq da php 7.0.
Ecco il doc php come lo spiega https://www.php.net/manual/en/mysqlinfo.concepts.buffering.php ovviamente nota che nello stile procedurale $link è il primo parametro della funzione mysqli_query mentre in mysql_query sarebbe stato il secondo parametro.
 
Ultima modifica:
Grazie mille della risposta.
Ho letto il link, ma francamente non ho capito - stando ai 3 esempi riportati - cosa io debba sostituire per avere un risultato simile :S
 
Bufferizzata:
Le query utilizzano la modalità bufferizzata per impostazione predefinita. Ciò significa che i risultati della query vengono immediatamente trasferiti da MySQL Server a PHP e quindi conservati nella memoria del processo PHP.
Senza Buffer:
Si occupa solo MySQL Server.
Per grandi dimensioni di dati si adopera senza buffer i tre esempi che hai letto in quella pagina.
Attenzione la funzione mysqli_num_rows ritorna (nel caso che non esista row ritorna zero) un intero decimale ma se supera PHP_INT_MAX è di tipo stringa, comunque usa il buffer perché senza buffer può ritornare valori sbagliati.
Il tuo else indica l'alternativa che dunque è uguale o minore a zero e lo zero dentro un if significa false non eseguire e si usa else per procedere.. non esiste altra soluzione che appunto l'alternativa.
 
Ultima modifica:

Discussioni simili