带有unserialize函数的PHP不';行不通

带有unserialize函数的PHP不';行不通,php,function,serialization,echo,Php,Function,Serialization,Echo,我对unserialize()函数有问题。我认为问题在于: $rslt = unserialize($data); 并且不回显此命令: echo $rslt[0]["product_id"]; 有什么问题 <?php // *****************zima user id******************** $user =& JFactory::getUser(); $usr_id = $user->get('id'); // **************

我对
unserialize()
函数有问题。我认为问题在于:

$rslt = unserialize($data);
并且不回显此命令:

echo $rslt[0]["product_id"];
有什么问题

<?php
// *****************zima user id********************
$user =& JFactory::getUser();
$usr_id = $user->get('id');

// *****************zima product id i pravi session********************

mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("shopping_katalog") or die(mysql_error());
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");

$result = mysql_query("SELECT * FROM x9qg6_jshopping_cart_temp WHERE id_cookie ='".$_COOKIE["jshopping_temp_cart"]."'");    
$data=null;
while ($row = mysql_fetch_array($result)) 
{
    $data = $row['cart'];
}
$rslt = unserialize($data);
echo $data;

$session = JFactory::getSession();
$session->set('kor', $usr_id);
$session->set('kupid', $rslt[0]["product_id"]);
echo $rslt[0]["product_id"];
$mymessage = $session->get('mymessage');
echo $mymessage;

if (!$result) {
echo 'Проблем со купувањето _php.' . mysql_error();
exit;
}else{
}

这是因为您的
'product\u id'
值有一个
[4]
索引键
'a:1:{i:4;…'
尝试:


这是因为您的
'product\u id'
值有一个
[4]
索引键
'a:1:{i:4;…'
尝试:


在对已序列化并保存到数据库中的数据进行非序列化之前,我遇到了一些问题。我发现对其进行排序的最简单方法是在序列化时进行base64_编码,在非序列化时进行解码

$seralized_data=base64_编码(序列化($data));


$unserialized_data=unserialize(base64_decode($data));

在取消序列化并保存到数据库中的数据之前,我遇到了麻烦。我发现排序它的最简单方法是base64_序列化编码和取消序列化解码

$seralized_data=base64_编码(序列化($data));


$unserialized\u data=unserialize(base64\u decode($data));

mysql\u connect(“localhost”、“user”、“pass”)中缺少双引号。这可能是你的问题吗?那太多的代码了。你应该把它减少到能再现你的问题的最小样本。你真的想只
取消序列化
数据库的最后一行吗?这需要先进行基本调试。你从
取消序列化()中得到了什么
?转换后的值返回,可以是布尔值、整数、浮点值、字符串、数组或对象。如果传递的字符串不是不可序列化的,则返回FALSE并发出E_通知。“我收到一条错误消息,告诉我要查看偏移量76或其他位置。复制后,我得到了类似于
s:??3:“209”
的东西,这些都是错误的。编码问题?进入数据库的东西不是出来的东西?在
mysql\u connect(“localhost”,“user”,“pass”)中缺少双引号。”
。这可能是你的问题吗?那太多的代码了。你应该把它减少到能再现你的问题的最小样本。你真的想只
取消序列化
数据库的最后一行吗?这需要先进行基本调试。你从
取消序列化()中得到了什么
?转换后的值返回,可以是布尔值、整数、浮点值、字符串、数组或对象。如果传递的字符串不是不可序列化的,则返回FALSE并发出E_通知。“我收到一条错误消息,告诉我要查看偏移量76或其附近的位置。复制后我得到了类似于
s:??3:“209”
的内容,这些内容都是错误的。编码问题?进入数据库的内容不是输出的内容?这家伙说了什么。
serialize()
可以在输出中生成时髦的非打印字符,例如“null”字符或
\0
,这与其他孩子(如mySQL和一些I/O函数)的效果不太好。使用
base64\u encode()
like@Qoop建议将确保数据按原样保存,不会中断其他功能。我应该补充一点,如果您需要能够“查看”存储的查询对象或其他内容,可以使用
json\u encode()/decode()
函数而不是序列化,因为它们似乎不会产生任何奇怪的控制字符。这家伙说的。
serialize()
可以在输出中生成时髦的非打印字符,例如“null”字符或
\0
,这与其他孩子(如mySQL和一些I/O函数)的效果不太好。使用
base64\u encode()
like@Qoop建议将确保数据按原样保存,不会中断其他功能。我应该补充一点,如果您需要能够“查看”存储的查询对象或其他内容,可以使用
json\u encode()/decode()
函数,而不是序列化,因为它们似乎不会产生任何奇怪的控制字符。您能否帮助我并告诉我,无论I后面的数字是什么,如何获取产品ID:。是否有类似于echo$rslt[x]['product\u ID'];其中x是介于0-9之间的数字?您能否帮助我并告诉我,无论I后面的数字是什么,我如何获取产品ID:。是否有类似于echo$rslt[x]['product_ID'];其中x是介于0-9之间的数字?
a:1:{i:4;a:17:{s:8:"quantity";i:1;s:10:"product_id";i:5196;s:11:"category_id";s:3:"209";s:5:"price";d:1;s:3:"tax";s:5:"18.00";s:6:"tax_id";s:1:"1";s:11:"description";s:0:"";s:12:"product_name";s:4:"test";s:11:"thumb_image";s:0:"";s:3:"ean";s:0:"";s:10:"attributes";s:6:"a:0:{}";s:16:"attributes_value";a:0:{}s:6:"weight";s:6:"0.0000";s:9:"vendor_id";s:1:"0";s:5:"files";s:6:"a:0:{}";s:14:"freeattributes";s:6:"a:0:{}";s:25:"dependent_attr_serrialize";s:6:"a:0:{}";}}
echo $rslt[4]['product_id'];