Heim > Backend-Entwicklung > PHP-Tutorial > 读取session中数组问题

读取session中数组问题

WBOY
Freigeben: 2016-06-23 14:40:12
Original
1810 Leute haben es durchsucht

本帖最后由 zl2727 于 2013-12-26 16:50:24 编辑

$query ="select * from #@__arctype where isbaike=1";        $this->dsql->Execute("bkarry",$query);		$bkarry=array();		session_start();		if(!session_is_registered("bkarry")){								while($row2 = $this->dsql->GetArray("bkarry"))        	{				$bkarry[]=$row2;			}			$bkarry2=serialize($bkarry);			$_SESSION['bkarry']=$bkarry2;								}else{					$bkarry=unserialize($_SESSION['bkarry']);		}		//unset($_SESSION['bkarry']);   		//var_dump($bkarry);		    while($row = $bkarry)        {	var_dump($row);			        }		exit();
Nach dem Login kopieren

从session中取出数组后就循环不了了 报内存不足
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1176 bytes)

大侠们帮帮忙 看看哪有问题 或者能更简单写

我想实现 查询数据有3000多条 每次都查就太慢了 所以想存到session中调用不用每次都查


回复讨论(解决方案)

内存不够用
修改可用内存有2中方法:
1、直接修改php.ini
memory_limit=128M
2、在入口文件添加
@ini_set('memory_limit', '128M');


但是到底是什么数据3000多条都要存到session,而且你的代码session里只存了一条记录 还内存不够用 是不是数据库建立的有问题

session不能这么用
数据应该放在KEY-VALUE数据库中。

问题不在 session 的存取,而在读取后的处理!
这是一个死循环

while($row = $bkarry) {  var_dump($row);}
Nach dem Login kopieren

但这不会引起内存不足,你应该指出出现内存不足时的地方

session_start();$query ="select * from #@__arctype where isbaike=1";if(! isset($_SESSION['bkarry'])) {  $this->dsql->Execute("bkarry",$query);  while($row2 = $this->dsql->GetArray("bkarry"))  {    $_SESSION['bkarry'][] = $row2;  }}$bkarry =& $_SESSION['bkarry'];
Nach dem Login kopieren

session 本身就做了序列化处理,无需再自己做序列化。并且 session 序列化后的串比 serialize 的要短许多
令 $bkarry 为 $_SESSION['bkarry'] 的引用,又可减少一半内存

查询太慢,你可以优化查询sql,写入session的值,之前可以serialize序列化。

foreach($bkarry as $k=>$row){} 
Nach dem Login kopieren
 这样读就可以了 谢谢版主的回复 
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage