Каковы последствия для памяти передачи результата MySQLi в функцию в PHP? - PullRequest
2 голосов
/ 14 марта 2012

Уважаемые боги Stackoverflow

Допустим, у меня есть запрос MySQL, который выбирает большой набор данных:

$query = "SELECT col_1, col_2, ..., col_99 FROM big_table";

И я получаю результат MySQLi примерно так:

$result = $db->query($query);

Но затем вместо того, чтобы иметь дело с $ result в этой области, я передаю его функции:

my_function($result);

И, находясь внутри my_function (), я перебираю каждую строку в результате и выполняю вещи:

function my_function($result) {

    while($row = $result->fetch_object()) {
        ...
    }

}

Пожалуйста, помогите мне понять последствия этого подхода для памяти.

Другими словами, что содержит $ result, и есть ли какие-нибудь подводные камни при передаче его функции?Стоит ли вместо этого передавать $ result по ссылке?Для чего бы это ни стоило, мне не понадобится $ result после того, как с ним покончит my_function ().

Приветствия из Южной Африки!

Ответы [ 3 ]

2 голосов
/ 14 марта 2012

Практически нет последствий для памяти при таком подходе. PHP передает объекты по ссылке, поэтому при передаче объекта в функцию используется очень мало памяти.

То же самое не совсем верно для массивов, они используют технику, называемую Copy On Write, что означает, что если вы измените массив внутри функции, то массив будет клонирован.

Вы всегда можете убедиться в этом каково это воздействие.

2 голосов
/ 14 марта 2012

У вас не будет никаких последствий для памяти вообще. $result содержит ресурс . Это не держит весь результат. Это просто идентификатор ресурса результата. MySQL использует это, чтобы собрать результат.

1 голос
/ 14 марта 2012

Объекты в PHP 5+ автоматически передаются по ссылке, поэтому передача объекта результата в функцию не будет дублировать его.

Затем вы можете сбросить переменную после вызова функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...