DOP apparentemente non ha mezzi per contare il numero di righe restituite da una query di selezione (mysqli
ha la variabile num_rows
).PHP DOP - Num Righe
C'è un modo per fare questo, a corto di utilizzare count($results->fetchAll())
?
DOP apparentemente non ha mezzi per contare il numero di righe restituite da una query di selezione (mysqli
ha la variabile num_rows
).PHP DOP - Num Righe
C'è un modo per fare questo, a corto di utilizzare count($results->fetchAll())
?
Secondo il manuale, v'è un metodo PDOStatement->rowCount
; ma non dovrebbe essere usato (citando):
Per la maggior parte dei database,
PDOStatement::rowCount()
non restituire il numero di righe interessate da una dichiarazioneSELECT
.
utilizzare invecePDO::query()
a rilasciare una dichiarazioneSELECT COUNT(*)
con gli stessi predicati come vostro destinatoSELECT
dichiarazione, quindi utilizzarePDOStatement::fetchColumn()
al recuperare il numero di righe che verranno essere restituiti.
L'applicazione può quindi eseguire l'azione corretta.
Se si dispone già di un set di record, e volete sapere quante linee sono in esso, dovrete recuperare i dati, utilizzando uno dei metodi fetch*
; e usa il conteggio, come hai suggerito tu.
Sì, quindi il mio problema. Com'è possibile che PDO * non abbia una funzione num_rows? Ogni altro connettore db lib fuori ci ce l'ha. – Ian
Se possiedi i dati, puoi contare il numero di linee che contiene da solo * (come hai suggerito) *; quindi suppongo che non ci sia * reale * necessità di un metodo per farlo ... –
Afferrando tutti i dati solo per il conteggio, quindi buttare via quell'array è molto dispendioso, specialmente se è un grande array .. – Ian
Un'altra opzione che potrebbe essere più vicina alla variabile num_rows
in mysqli
e alla funzione API C corrispondente mysql_num_rows()
. È quello di utilizzare la funzione di MySQL FOUND_ROWS()
che restituisce le stesse informazioni, senza dover contare tutti i record nel risultato di nuovo.
Esempio:
$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()
al giorno d'oggi questa risposta non ha senso perché puoi contare il conteggio in modo regolare –
Sebbene DOP apparentemente ha tutti i mezzi per contare il numero di righe restituite da una query di selezione per mysql, ciò che è più importante è che non v'è inutile per tale funzione in il primo posto.
Ogni volta che avete un idea di utilizzare rowCount() per una query SELECT, sarebbe sia superfluo o addirittura dannoso. Vedere PDO rowCount():
Hai persino letto la risposta accettata a questa domanda? Dalla documentazione di PDO: "Se l'ultima istruzione SQL eseguita dalla PDOStatement associata era un'istruzione SELECT, alcuni database potrebbero restituire il numero di righe restituite da tale istruzione.Tuttavia, questo comportamento non è garantito per tutti i database e non dovrebbe essere invocato per applicazioni portatili. " – Ian
Bene, se stai chiedendo l'applicazione portatile, non taggare la tua domanda con mysql allora. –
come devo andare a contare allora? sto usando una query PHP MySQL più avanti nel documento HTML per visualizzare i dati dal database, ma l'elemento in cui voglio visualizzare il conteggio arriva prima del recupero e della visualizzazione dei dati ??? – Anthony
possibile duplicato di http://stackoverflow.com/questions/460010/work-around-for-php5s-pdo-rowcount-mysql-issue - Questa domanda è uguale alla tua. La risposta accettata è ciò che desideri. – zombat
Ho visto quella domanda, ma la risposta fa schifo. Eseguire una seconda query sul db solo per vedere il numero di righe che ora viene memorizzato in un set di record è davvero stupido. – Ian