PHP.mk документација

Види:

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

mysqlinfo.concepts.buffering.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека mysqlinfo.concepts.buffering.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
Види:

Референца за `mysqlinfo.concepts.buffering.php` со подобрена типографија и навигација.

mysqlinfo.concepts.buffering.php

Види:

Запитите по дифолт користат тампониран режим. Ова значи дека резултатите од запитот веднаш се пренесуваат од MySQL Server до PHP и потоа се чуваат во меморијата на PHP процесот. Ова овозможува дополнителни операции како броење на бројот на редови и поместување (прескокнување) на покажувачот на тековниот резултат. Исто така, овозможува издавање дополнителни запити на истата врска додека се работи на множеството резултати. Недостаток на тампонираниот режим е што поголемите множества резултати може да бараат доста меморија. Меморијата ќе биде окупирана додека не се отстранат сите референци за множеството резултати или додека множеството резултати не биде експлицитно ослободено, што најдоцна ќе се случи автоматски при крајот на барањето. Терминологијата „store result“ (зачувај резултат) исто така се користи за тампониран режим, бидејќи целиот сет на резултати се чува одеднаш.

Забелешка: Кога се користи libmysqlclient како библиотека, меморискиот лимит на PHP нема да ја брои меморијата искористена за множествата резултати, освен ако податоците не се преземени во PHP променливи. Со mysqlnd, меморијата што се зема предвид ќе го вклучува целиот сет на резултати.

Нетампонираните MySQL запити го извршуваат запитот, а потоа чекаат податоците од MySQL серверот да бидат преземени. Ова користи помалку меморија од страна на PHP, но може да го зголеми оптоварувањето на серверот. Освен ако целиот сет на резултати не е преземен од серверот, не можат да се испратат дополнителни запити преку истата врска. Нетампонираните запити може да се наречат и „use result“ (користи резултат). Откако ќе се преземат сите редови во множеството резултати, множеството резултати исчезнува и не може повторно да се итерира.

Следејќи ги овие карактеристики, нетампонираните запити треба да се користат само кога се очекува големо множество резултати што ќе се обработува последователно. Нетампонираните запити содржат голем број стапици што ги отежнуваат нивното користење, на пр. бројот на редови во множеството резултати не е познат додека не се преземе последниот ред. Тампонираните запити се полесен и пофлексибилен начин за обработка на множествата резултати.

Бидејќи тампонираните запити се стандардни, примерите подолу ќе покажат како да се извршуваат нетампонирани запити со секое API.

Пример #1 Пример за нетампониран запит: mysqli

<?php
$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");
$unbufferedResult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);

foreach (
$unbufferedResult as $row) {
echo
$row['Name'] . PHP_EOL;
}
?>

Пример #2 Пример за нетампониран запит: pdo_mysql

<?php
$pdo
= new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_password');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$unbufferedResult = $pdo->query("SELECT Name FROM City");
foreach (
$unbufferedResult as $row) {
echo
$row['Name'] . PHP_EOL;
}
?>

Белешки од корисници 1 белешка

guy dot sartorelli на silverstripe точка com
пред 2 години
The bufferred and unbuffered queries can be used for a limited amount of records.

For example; while implementing download CSV for a query using buffered way, memory limit issues comes up above 30,000 records to be buffered.

Similarly, For unbuffered the load switched to database server.

This load on both the web (buffered) and MySQL (unbuffered) servers can be reduced as below supporting download CSV for 30,000+ records.

<?php
// Shell command. 
$shellCommand = 'mysql '
    . '--host='.escapeshellarg($hostname).' '
    . '--user='.escapeshellarg($username).' ' 
    . '--password='.escapeshellarg($password).' '
    . '--database='.escapeshellarg($database).' ' 
    . '--execute='.escapeshellarg($sql).' '
    . '| sed -e \'s/"/""/g ; s/\t/","/g ; s/^/"/g ; s/$/"/g\'';

// CSV headers 
header("Content-type: text/csv"); 
header("Content-Disposition: attachment; filename={$csvFilename}"); 
header("Pragma: no-cache"); 
header("Expires: 0");

// Execute command via shell and echo the complete output as a string
echo shell_exec($shellCommand);
?>

There will be a bit of CPU consumption for the sed regex.
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.