php反序列化值
Posted
技术标签:
【中文标题】php反序列化值【英文标题】:php unserialize values 【发布时间】:2017-06-10 19:46:50 【问题描述】:值$psabad1
是(i:169;i:170;i:173)
;这是序列化的。我想将此值转换为(169,170,173)
。在这段代码中只返回第一个值(169)
,而我想返回所有值(169,170,173)
$stmt1 = $db->prepare("SELECT `psabad`,`transId`,`pardakht` FROM `orders` WHERE `transId`=?");
$stmt1->bind_param("s", $transId);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($psabad1, $transid1, $pardakht1);
while ($stmt1->fetch())
$pardakht = unserialize($psabad1);
$stmt2 = $db->prepare("SELECT `idsabad`,`idmahsool`,sabad.tedad, sabad.pardakht, pack2.titr, pack2.brand FROM `sabad` INNER JOIN pack2 ON pack2.id = sabad.idmahsool WHERE `idsabad`=?");
$stmt2->bind_param("i", $pardakht);
$stmt2->execute();
$stmt2->store_result();
$stmt2->bind_result($idsabad2, $idmahsool2,$tedad2, $pardakht2, $titr2, $brand2 );
$stmt2->fetch();
echo $titr2;
【问题讨论】:
我无法理解您的问题。你能用一个暗示性的标题和简洁的信息重写你的帖子吗? 使用英文变量名也有助于我们更好地理解您的代码。 在此代码中仅打印第一个 $psabad1 的值,而我想打印 $psabad1 中的所有值 【参考方案1】:你的输出看起来很奇怪。通常,序列化数据如下所示:
a:9:i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;
如果你的数据真的像你在标题中所说的那样,如下面的$s,你可以用这个小函数检索一个数组:
<?php
$a = [1,2,3,4,5,6,7,8,9];
$s = 'i:1;i:2;i:3;i:4;i:5;i:6;i:7;i:8;i:9;';
var_dump($a === _unserialize($s));
function _unserialize($s)
$i = 0;
$_s = '';
foreach(explode(';', trim($s, '()')) as $part)
if($part != '')
$_s .= 'i:' . ($i++) . ';' . $part . ';';
return unserialize('a:' . $i . ':' . $_s . '');
?>
输出:
..\php\php5.6\php.exe serialize.php
bool(true)
【讨论】:
感谢您的回答我想要 $s = 'i:1;i:2;i:3;i:4;i:5;i:6;i:7;i:8;我:9;';转换为 $a=1,2,3,4,5,... 并使用 Just one in ring while 例如:while($S.count)replace $r=a 我的例子中的implode(',' _unserialize($s))
或 foreach(_unserialize($s)...)
怎么样?
您的代码返回真或假,但我想返回数组值中的所有值,这意味着分别返回 1,2,3,4,5,6
和值 $s 来自数据库
请回答这个问题以上是关于php反序列化值的主要内容,如果未能解决你的问题,请参考以下文章