我有以下代码:
include 'includes/connect.php';
$sp= "clot";
$selectall = mysqli_prepare($connection, "SELECT Count FROM prices WHERE Category = ? ORDER BY ppu LIMIT 11");
mysqli_stmt_bind_param($selectall, 's', $sp);
mysqli_stmt_execute($selectall);
$resulttotal = mysqli_stmt_get_result($selectall);
$x=1;
while($row = mysqli_fetch_array($resulttotal, MYSQLI_ASSOC)){
$_SESSION[$x] = $row['Count'];
$x++;
}
$y=1;
while(isset($_SESSION[$y])){
if($y==11){
$_SESSION['nextstart'] = $_SESSION[$y];
unset($_SESSION[11]);
}
else{
echo($y);
echo("<br>");
echo($_SESSION[$y]);
echo("<br>");
$y++;
}
}
Run Code Online (Sandbox Code Playgroud)
哪个输出预期的数字串(1,17,2,18 ......)此错误消息(十次,使用密钥1,密钥2,密钥3等):
Notice: Unknown: Skipping numeric key 1 in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)
看到这个错误,我能找到的唯一答案是将数组放入超全局会导致这种情况.我不相信我已经放了一个数组,$row['Count']是一个字符串,不是吗?我在stackoverflow上找不到关于此错误的任何条目.
导致此错误的原因是什么,我应该怎么做才能修复它?(显示的代码只是我使用我的数据库进行实验和规划无限分页的设计.)
IMS*_*SoP 32
PHP会话存储机制最初是围绕"注册"变量构建的,因此键$_SESSION必须是可以作为变量处理的名称.
这意味着它$_SESSION[42]是无效的,因为它$42不是有效的变量名,并且因为$foo[42]并且$foo['42']引用相同的东西,$_SESSION['42']也是无效的.
解决方案是在会话变量上使用前缀(例如$_SESSION['row_count_' . $x] = $row['Count'];)或将它们组成一个数组,然后您可以稍后循环(例如$_SESSION['row_counts'] = array(); ... $_SESSION['row_counts'][$x] = $row['Count'];)
注意:此限制实际上是将会话写入磁盘时使用的"序列化处理程序"的一部分,这就是为什么错误没有上下文(它们在PHP关闭时被触发).在PHP的最新版本中,有一个session.serialize_handler的设置,它没有这个限制:
php_serialize可从PHP 5.5.4获得.php_serialize在内部使用普通的serialize/unserialize函数,没有php和php_binary的限制.较旧的序列化处理程序不能存储数字索引,字符串索引也不包含$ _SESSION中的特殊字符(|和!).使用php_serialize可以避免脚本关闭时出现数字索引或特殊字符错误.
| 归档时间: |
|
| 查看次数: |
18802 次 |
| 最近记录: |