从PHP5升级到PHP7" Broke"检索数组值

时间:2016-08-17 16:38:06

标签: php mysql mysqli

在PHP5下,我能够使用通过以下代码开发的数组($_SESSION['issuenum_index'])。

if ($_SESSION['mfilter'] == 0) {
    $query = "SELECT IssueIDNUM,MagazineNUM FROM tblIssueList ORDER by IssueDate DESC, IssueIDNUM ";
} else {
    $query = "SELECT IssueIDNUM,MagazineNUM FROM tblIssueList WHERE MagazineNUM = {$_SESSION['mfilter']} ORDER BY IssueDate DESC, IssueIDNUM ";
}           

$_SESSION['issuenum_index'] =$conn->query($query);

if (!$_SESSION['issuenum_index']) die($conn->error);

$_SESSION['rowcount'] = mysqli_num_rows($_SESSION['issuenum_index']);

现在我已经升级到PHP7,这个数组似乎不起作用。返回正确的行计数,但IssueIDNUMMagazineNUM的值似乎丢失。

当我运行以下代码时:

    foreach($_SESSION['issuenum_index'] as $key => $value)
    {
        echo $key." Value:  ". $value ."<br>" ;
    }

我得到了结果:"2181 Value: Array"。号码&#34; 2181&#34;是行号。而不是单词&#34;数组&#34;,我期待值与#34; IssueIDNUM&#34;和&#34; MagazineNUM&#34;。

当我运行以下代码时:print_r($_SESSION['issuenum_index']);我得到:"mysqli_result Object ( [current_field] => 0 [field_count] => 2 [lengths] => [num_rows] => 2187 [type] => 0 )"。我没有看到两个字段名称。

如何为此阵列显示字段名称? 此外,如何修复PHP7的代码?

1 个答案:

答案 0 :(得分:1)

$conn->query($query)的返回不是数组,而是实现Traversable接口的mysql_result对象,因此您可以遍历它。 [current_field] => 0 [field_count] => 2 [lengths] => [num_rows] => 2187 [type] => 0是此对象的属性。 http://php.net/manual/en/class.mysqli.php

因此,当我们遍历此对象时,它将返回一个数据数组。 “2181 Value:Array” - 2181 - 是数据数组的关键。我希望,你上面有“218 0 值:数组”,依此类推,直到0.数组是你的数据所在。只要尝试print_r($ value),你就会看到,发生了什么。

您可以使用fetch_all方法(http://php.net/manual/en/mysqli-result.fetch-all.php)设置会话中的所有数据(不询问,为什么这样做)

$_SESSION['issuenum_index'] = $conn->query($query)->fetch_all();

编辑:建议你之前的PHP版本低于5.4,其中添加了Traversable界面。没有处理PHP7。