English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Viene visualizzato un messaggio di contenuto insufficiente quando si eseguono query su grandi quantità di dati dal database:
PHP Fatal error: Dimensione massima della memoria consentita di 268 435 456 byte esaurita
Questo problema è chiamato query bufferizzata e non bufferizzata (Buffered and Unbuffered queries) sul sito web ufficiale di PHP. Il modello di query predefinito di PHP è il modello bufferizzato. Questo significa che i risultati delle query vengono estratti tutti insieme nella memoria per essere elaborati dal programma PHP. Questo dà al programma PHP funzionalità aggiuntive, come calcolare il numero di righe, spostare il puntatore su una riga specifica, ecc. E soprattutto, il programma può eseguire query e filtri secondari sui set di dati. Ma il difetto di questo modello di query bufferizzata è che consuma memoria, ovvero usa lo spazio in cambio della velocità.
D'altra parte, un altro modello di query di PHP è la query non bufferizzata, in cui il server database restituisce i dati uno per uno, invece di restituirli tutti insieme. Questo risultato comporta che il programma PHP consuma meno memoria, ma aumenta la pressione sul server database, poiché il database deve aspettare che PHP prenda i dati fino a quando non sono tutti stati presi.
Evidentemente, il modello di query bufferizzata è adatto per le query su piccole quantità di dati, mentre la query non bufferizzata è adatta per le query su grandi quantità di dati.
Sapete tutti che nel modello di bufferizzazione delle query di PHP, di seguito sono elencati gli esempi su come eseguire le API di query non bufferizzata.
Metodo di query non bufferizzata uno: mysqli
<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT); if ($uresult) { while ($row = $uresult->fetch_assoc()) { echo $row['Name'] . PHP_EOL; } } $uresult->close(); ?>
Metodo di query non bufferizzato due: pdo_mysql
<?php $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) { while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; } } ?>
Metodo di query non buffering tre: mysql
<?php $conn = mysql_connect("localhost", "my_user", "my_pass"); $db = mysql_select_db("world"); $uresult = mysql_unbuffered_query("SELECT Name FROM City"); if ($uresult) { while ($row = mysql_fetch_assoc($uresult)) { echo $row['Name'] . PHP_EOL; } } ?>
Questo è tutto il contenuto dell'articolo, spero che sia utile per la tua apprendimento, e ti prego di supportare e applaudire il tutorial.
Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il copyright è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di copyright, invia un'e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.