为什么存储在会话变量中的数组计数加倍?

时间:2016-04-28 16:05:47

标签: php html mysql arrays phpmyadmin

我有一个包含以下列的表..

database columns

我将该表的数据存储在会话变量

$sql = "SELECT * from `basic_info` where Username='".$user."' and Password='".$pass."'";
$sqlresult = mysqli_query($con,$sql) or die(mysqli_error($con));
$rowCount = mysqli_num_rows($sqlresult);
$currentData = mysqli_fetch_array($sqlresult);

if($rowCount > 0){
    $_SESSION['currentUser'] = $currentData;
}

但每当我使用下面的代码回显数组的值时:

<?php

echo "Welcome {$_SESSION['currentUser'][1]}";
echo "<div name='infoDisplay'>";
echo "<table>";
echo "<tr>";
echo "<td><b>Family Name</b><td>";
echo "<td><b>First Name</b><td>";
echo "<td><b>Middle Name</b><td>";
echo "<td><b>Birthday</b><td>";
echo "<td><b>Contact Number</b><td>";
echo "<td><b>Address</b><td>";
echo "<td><b>Username</b><td>";
echo "<td><b>Password</b><td>";
echo "<td><b>Permission Level</b><td>";
echo "<td></td>";
echo "</tr>";


echo "</table>";
echo "</div>";

echo "Array count: " . count($_SESSION['currentUser']) . "<br/>";

echo "<tr>";
for($rowcount=0; $rowcount<=count($_SESSION['currentUser']);$rowcount++){
    echo "<td>". $_SESSION['currentUser'][$rowcount] . "</td>";
}
echo "</tr>";

?>

数组计数加倍。我的数据库中只有9列,但结果是返回18个计数。这也是为什么我也会得到以下错误:

error

请告诉我您如何轻松解决问题的意见。非常感谢你提前!祝你有美好的一天!

2 个答案:

答案 0 :(得分:0)

如评论中所述,mysqli_fetch_array返回一个数组,其中包含查询中所选每列的两个元素:一个元素带有数字键,另一个元素的键是列名。因此,如果您选择9列,则数组将包含从08的数字键,以及命名键FamilyNameFirstName,依此类推。

您遇到的问题count($_SESSION['currentUser'])会计算这两个元素,因此会返回18,而不是9。然后,您的for循环将此作为限制,因此它会尝试回显$_SESSION['currentUser'][9]$_SESSION['currentUser'][17],但不存在。

解决方法是使用mysql_fetch_row()代替mysql_fetch_array()。或者使用mysql_fetch_assoc()并使用foreach循环代替for循环,这是我的正常偏好。

答案 1 :(得分:0)

  

来自手册:

     

mysqli_fetch_array()是mysqli_fetch_row()函数的扩展版本。除了将数据存储在结果数组的数字索引中之外,mysqli_fetch_array()函数还可以使用结果集的字段名作为键将数据存储在关联索引中。

因此,对于您返回的每一行,我们都说您执行了select fname,lname from ...

你会得到每一行的数组,如下所示: -

$row would be 

[0 => 'fred', 'fname' => 'fred', 1 => 'Bloggs', 'lname' => 'Bloggs']

这是您正在讨论的列的倍增

如果您使用

mysqli_fetch_array($sqlresult, MYSQLI_ASSOC);

mysqli_fetch_assoc($sqlresult);

您只能获得列名称的关联数组,如:

['fname' => 'fred', 'lname' => 'Bloggs']