2012-09-25 78 views
1

是否有可能要求我的数据库中的所有数据,并从中创建对象并将其保存到数组或其他东西,所以我只需要调用数据库一次,然后我只使用我的本地数组?如果是的话,它是如何完成的?在PHP中缓存来自MySQL的数据?

public function getAllProjects(){ 

    $query="SELECT * FROM projects"; 
    $result=mysql_query($query); 
    $num=mysql_numrows($result); 
    while ($row = mysql_fetch_object($result)) { 
     // save object into array 
    } 
} 

public function fetchRow($row){ 
    include("Project.php"); 
    $project = new Project(); 

    $id=$row->id; 
    $project->setId($id); 

    $title=$row->title; 
    $project->setTitle($title); 

    $infos=$row->info; 
    $project->setInfo($infos); 

    $text=$row->text; 
    $project->setText($text); 

    $cate=$row->category; 
    $project->setCategory($cate); 

    return $project; 
} 

如果我有例如这个代码。如何将对象正确存储到数组中,从哪里获取数据?为什么我不能制作多个“项目”类型的对象?

+0

你想要Mysql Cache吗? –

+0

是的,当然,这是可能的。你有什么问题执行这样的事情?但镜像*整个*数据库似乎毫无意义。那么数据库是什么? – deceze

+0

将其添加到'$ _SESSION'或仅使用memcached。视图通常也是速度的一个很好的解决方案。 –

回答

1

您应该在php中使用$_SESSION变量,要使用它们,请在代码的开头添加一个session_start()。然后,你可以用$_SESSION['selectaname'] = yourvar

没有设置瓦尔阻止你做一个SQL查询像"SELECT username FROM users WHERE id = 1"然后设置一个$_SESSION['user'] = $queryresult

,那么你也会有这样的:

echo $_SESSION['user']; 

"mylogin" 
+0

我可以从不同的php文件访问这个变量吗? – 4ndro1d

+0

如果你把session_start();之前,所有的东西在一个PHP文件的顶部... – Chris

+0

是的,你只需要使用session_start()每次你向服务器发出请求,所以它取决于你的代码,并且不要忘记把您的代码顶部的session_start – Weacked

2

让我们忽视的事实是你将耗尽内存。

如果您拥有数组中的所有内容,则不再具有关系数据库的功能。
在php中尝试搜索多兆字节,多维数组,并为延长的休息时间做好准备。 如果你在做这样的事情是因为你觉得数据库很慢......你应该了解数据标准化并正确使用索引。
没有NoSQL不是答案。
很抱歉弹出您的气球。

编辑添加:你可以使用memcache来存储一些昂贵的进程的最终产品。不要打扰存储琐碎查询的结果,mysql的内部缓存对于那些非常优化。

+0

我不需要数据库来编辑数据或有点。我只是在那里有我的项目的信息,你可以在我添加的示例代码中看到。我有标题,信息和文字。我试着每次为我点击的每个项目调用数据库,这种情况下标题,信息和文本随机交换,不要引用正确的项目。我无法弄清楚为什么。 – 4ndro1d

+0

这是一个完全不同的问题,你会发布SHOW CREATE TABLE项目的输出吗? –

+0

和print_r($ object_array)的输出我正在读取数组的数字id而不是数据库的一个 –