将MySQLi结果传递给PHP中的函数会对内存产生什么影响


What are the memory implications of passing a MySQLi result to a function in PHP?

亲爱的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?就其价值而言,一旦my_function()完成,我就不需要$result了

来自南非的欢呼!

您将不会有任何内存影响。CCD_ 1持有资源。它并不代表全部结果。这只是结果的资源Id。MySQL使用这个来收集结果。

这种方法实际上不涉及内存。PHP通过引用传递对象,因此在将对象传递给函数时使用的内存非常少。

数组的情况并非如此,它们使用了一种名为"写时复制"的技术,这意味着如果在函数中更改数组,则该数组将被克隆。

你总是可以亲眼看到影响。

PHP 5+中的对象是通过引用自动传递的,因此将结果对象传递到函数中不会复制它

然后,您可以在调用函数后取消设置变量。