php - 为什么 MySQL 查询循环会更改与查询无关的数组?

标签 php mysql

我有以下代码:

print_r($queries);
$id2query = array(); 
while ($res_array = mysql_fetch_array($results)) {
    $id = $res_array['id'];
    $query = $res_array['query'];
    $id2query[$id] = $query;
}
print_r($queries);

有趣的是printr_r在循环前后返回不同的东西。

有人知道怎么可能吗?

已添加

$queries 是一个数组。它显示代码是函数的一部分,$queries 是函数的参数之一。在循环之前它返回:

Array ( [0] => )

循环结束后返回:

Array ( [0] => web 2.0 )

添加 2

web 2.0 来自 $res_array。以下是 $res_array 的内容:

Array ( [0] => 17 [id] => 17 [1] => web 2.0 [query] => web 2.0 [2] 

但我不明白 $res_array 中的值如何迁移到 $queries

添加 3

我试过了

print "AAAA".var_dump($queries)."BBB";

它返回 AAABBB

添加了 4

我已经设法以正确的方式使用 var_dump,这是它在循环之前返回的内容:

array(1) { [0]=> &string(0) "" }

这是我在循环后得到的:

array(1) { [0]=> &string(7) "web 2.0" }

但是我不明白这是什么意思。

最佳答案

ADDED 4 下面的 var_dump 显示了它,该数组包含对字符串的引用。所以它不是该字符串的副本,它类似于指向原始字符串的指针(我知道,它们不是真正的指针,请参阅下面的 PHPDocs)。因此,如果该值发生更改,引用也会显示更改后的值。

我建议你看看:
PHPDoc References
PHPDoc What references do

示例代码:

$s = "lulu";
$a = array(&$s);
var_dump($a);
$s = "lala";
var_dump($a);

第一个 var_dump 将返回:

array(1) {
 [0]=>
 &string(4) "lulu"
}

第二个:

array(1) {
 [0]=>
 &string(4) "lala"
}

关于php - 为什么 MySQL 查询循环会更改与查询无关的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247656/

相关文章:

php - 我应该如何使用 PHP 和 MySQL(不使用 OAuth)以安全的方式将 'Token Based Authentication' 实现到一组 Web API?

php 使用一个方向返回

mysql - 从一个表中选择 1 条记录,从另一个表中选择 0.n 条记录

php - 将代码从 MySQL 更改为 PDO

php - CMS 架构 - 走哪条路?

php - 如何在 Laravel 中使用 PDO 进行 block 更新

javascript - 在模式中从 SQL 数据库加载数据

php - 向mysql表中插入纯文本列表

mysql - 如何在表中找不到数据时将计数设为 0?

mysql - 如何将mysql表导出到文件