2016-04-28 53 views
0

我有包含下列的表..为什么我的数组存储在会话变量中双击?

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

请让我知道你对我怎么能轻易解决问题的投入。非常感谢您提前!祝你有美好的一天!

+0

'$ _SESSION [ 'currentUser'] [] = $ CURRENTDATA;'可以有不止一个当前用户?这是你的实际代码吗?顶部和底部并不真正匹配。 –

+3

至于你为什么得到双倍,这是因为你没有阅读[文档](http://php.net/manual/en/mysqli-result.fetch-array.php),它显示默认' mysqli_fetch_array'返回数字和字符串键,即0-n和列名。 –

+0

@JonStirling我忘了编辑那部分。我已经纠正了这个部分。请忽略该行。谢谢! –

回答

0

正如评论中所述,mysqli_fetch_array返回一个数组,其中包含查询中选择的每列的两个元素:一个元素带有数字键,另一个元素的键是列名。因此,如果您选择9列,阵列将具有从08的数字密钥,并命名密钥FamilyName,FirstName等。

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

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

0

FROM THE MANUAL:

mysqli_fetch_array() is an extended version of the mysqli_fetch_row() function. In addition to storing the data in the numeric indices of the result array, the mysqli_fetch_array() function can also store the data in associative indices, using the field names of the result set as keys.

所以你返回的每一行可以说你做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']