Php mysql\u获取\u将数据关联到用户浏览器中的COOKIE

Php mysql\u获取\u将数据关联到用户浏览器中的COOKIE,php,mysql,cookies,Php,Mysql,Cookies,我在mysql中有数据,它不需要任何安全性 每次使用mysql\u fetch\u assoc时,我都有一个sql查询字符串来获取数据 所以,我计划将数据存储在用户浏览器中,以减少对sql的需求 if (!isset($_COOKIE['countries'])){ $query = "SELECT iso,name FROM sel_country"; $countries = mysql_query($query); setcookie('countries'

我在mysql中有数据,它不需要任何安全性

每次使用mysql\u fetch\u assoc时,我都有一个sql查询字符串来获取数据

所以,我计划将数据存储在用户浏览器中,以减少对sql的需求

    if (!isset($_COOKIE['countries'])){
    $query = "SELECT iso,name FROM sel_country";
    $countries = mysql_query($query);
    setcookie('countries', serialize($countries), time()+3600);
   }else{
    $countries = $unserialize($_COOKIE['countries']);
    }
while ($row = mysql_fetch_assoc($countries)) {echo $row['name']}
但是,当设置cookie时,它会显示以下错误

致命错误:函数名必须是第15行/home/worlds/public_html/index/ctrl.php中的字符串

浏览器中的我的cookie将内容显示为i%3A0%3B


请帮帮我,我该怎么做?

使用unserialise()而不是$unserialize()

如果无法序列化结果资源,则需要首先对其使用mysql\u fetch\u assoc。直到调用fetch方法,结果才真正从mysql服务器中提取出来

像这样:

if (!isset($_COOKIE['countries'])){
    $query = "SELECT iso,name FROM sel_country";
    $countries = mysql_query($query);
    $result = array();
    while ($row = mysql_fetch_assoc($countries)) {$result[] = $row['name']}
    setcookie('countries', json_encode($result), time()+3600);

    //And to make the rest of the script able to use it as below:
    $countries = $result;
} else {
    $countries = json_decode($_COOKIE['countries']);
}

您不能序列化结果资源,您需要首先对其使用mysql\u fetch\u assoc。在调用fetch方法之前,结果实际上还没有从mysql服务器中提取出来。但是,如果我们这样做,我们将只获得1行作为数组。但是其他行将丢失。当然,我的意思是,要像在脚本底部那样循环,只需存储该行并序列化存储的数组。请看我的答案中的一个例子。你的意思是循环到多维数组?如果是这样,我们的输出方式也会改变。所以我们需要添加几行。非常好的主意。Thankyou@GowthamRaj如果这个答案是你的问题的答案,请考虑将它标记为“接受”,点击它旁边的复选标记。在我设置的时候:StToCKIIE(“国家”,序列化($结果),时间(3600));我得到500个内部服务器Error@GowthamRaj事实上,反序列化cookie是一个安全缺陷(只是做了一些研究),请改用json_encode/json_decode(请参阅我的编辑)。@GowthamRaj还请记住,cookie中的国家列表可以由用户编辑,因此,请确保它没有用于任何重要的内容。无法修改标题信息-标题已由第16行的/home/adstrsli/public_html/pages/initate.php中的/home/adstrsli/public_html/pages/initate.php发送(输出开始于/home/adstrsli/public_html/pages/initate.php:15)