【问题标题】:grab serialized data from sql从sql中获取序列化数据
【发布时间】:2012-11-14 13:05:10
【问题描述】:

我想从sql中抓取未序列化的数据,但它只显示第一行。怎么了?

$cars=unserialize($rows["cars"]);
foreach($cars as $car)
{
  echo "<li>".$car."</li>";
}

SQL 表中的字段如下所示:

a:2:{s:6:"car";s:9:"mercedes";s:6:"ps";s:46:"120";}
a:2:{s:6:"car";s:7:"audi";s:6:"ps";s:74:"145";}

【问题讨论】:

  • 那是什么语言?它肯定不是 SQL。
  • 只返回第一行。它的 php 和我从 mysql 表中获取数据。顺便说一句,我用的是 xampp...
  • var_dump($rows["cars"]); 的输出是什么?
  • 您使用的是什么 RDBMS? MySql?
  • $res=mysql_query("SELECT cars.id, cars.cars, WHERE cars.id=".$id); $rows=mysql_fetch_array($res);

标签: php sql serialization foreach


【解决方案1】:

起初您的序列化字符串无效: a:2:{s:3:"汽车";s:8:"梅赛德斯";s:2:"ps";s:3:"120";} a:2:{s:3:"汽车";s:4:"奥迪";s:2:"ps";s:3:"145";} 是正确的。

第二:

你不能像这个 NOT WORKING 示例那样连接这些值并进行反序列化:

unserialize('a:2:{s:3:"car";s:8:"mercedes";s:2:"ps";s:3:"120";}a:2:{s:3:"car";s:4:"audi";s:2:"ps";s:3:"145";}');

这将只返回第一个条目。 您现在必须选择: 1. 事先通过换行符拆分该字符串,或将其作为一个序列化字符串正确写入数据库。应该是这样的:

var_dump(serialize(array(array('car'=>'mercedes', 'ps' => '120'), array('car'=>'audi', 'ps' => '145'))));
string(110) "a:2:{i:0;a:2:{s:3:"car";s:8:"mercedes";s:2:"ps";s:3:"120";}i:1;a:2:{s:3:"car";s:4:"audi";s:2:"ps";s:3:"145";}}"

更新: 抱歉没看到“还有 8 个 cmets 链接”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2021-10-09
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多