来自mysqli_fetch_array()和mysqli_fetch_assoc()的foreach中的奇怪非法字符串偏移量

时间:2015-04-24 20:54:18

标签: php mysqli

我正在测试我想要从数据库返回的数据集。 我在命令行模式下运行它。当我var_dump()数据时,我可以看到返回的数据,但是当我尝试遍历其中包含重复数据的数组时,我收到下面的警告消息,无法打印数组项。

对某些人来说,我确信这是显而易见的,但我不知道为什么会这样。我相信我在这里做错了什么......但是什么?

考虑:

$link = mysqli_connect("localhost","username","password","mydatabase") or die("Error " . mysqli_error($link)); 
$query = "SELECT * FROM citizen_application";
$execute = $query or die("Error in the consult.." . mysqli_error($link)); 

//execute the query. 
$result = $link->query($execute); 
$data = mysqli_fetch_array($result); // also tried mysqli_fetch_assoc() and the issue persists

//display information: 
//var_dump($data); //This show duplicates in the array returned???

foreach($data as $data_unit){
    print_r($data_unit["dob"]."\r");
}

日志中的警告:

  

非法字符串偏移' dob'

2 个答案:

答案 0 :(得分:1)

mysqli_fetch_array返回一个数组,你用foreach遍历数组,$ data_unit很可能是单个元素而不是数组......试试吧

foreach($data as $data_unit){
    echo $data_unit."\r";
}

或使用mysqli_fetch_assoc()并尝试

foreach($data as $fieldname => $data_unit){
    echo "$fieldname = $data_unit\r";
}

答案 1 :(得分:0)

在命令行模式下运行脚本时,似乎无法使用foreach()执行此操作。但是我发现下面的解决方案能够让我得到我想要的东西:

while($data = mysqli_fetch_assoc($result)) { 
   print_r($data["dob"]."\n");
} 

我注意到文档中的所有示例都是这样做的。我认为这只是一种偏好。它似乎并非如此。我希望这有助于其他人,因为这非常令人恼火。您以前可以使用以前的mysql函数轻松完成此操作。