在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,这个数组似乎不起作用。返回正确的行计数,但IssueIDNUM
和MagazineNUM
的值似乎丢失。
当我运行以下代码时:
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的代码?
答案 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。