-1

我有一个问题,如果我从数据库中检索记录,它将作为字符串返回。但我不希望这样,因为它应该是一个数组:

var_dump($data)

返回

string(654) "Array ( [0] => Array ( [1] => 17-6-2015 [2] => Livingwater TEST [3] => J. Luttik [4] => E. Luttik [5] => Annemarie, Rosy [id] => 7 ) [1] => Array ( [1] => 21-6-2015 [2] => Celebration [3] => P. Brenner [4] => B. Nobbe [5] => Heleen, Laurens [id] => 8 ) [2] => Array ( [1] => 24-6-2015 [2] => Celebration [3] => C. Visser [4] => E. Luttik [5] => Annet, Elsemijn [id] => 9 ) ) "

我怎样才能解决这个问题?

4

3 回答 3

4

我想我明白了,它存储在数据库中是错误的。它应该存储为json_encode($data),并检索为json_decode($data, true)

但另一种方法是将其存储为serialize($data)并使用unserialize($data)

于 2015-06-05T14:29:17.467 回答
2

我会使用序列化将信息保存在数据库中并取消序列化以将其检索到可用的东西。我相信这是最好的方法。也可以使用 json_encode 和 json_decode,但我更喜欢 [un]serialize

于 2015-06-05T14:32:34.530 回答
2

好的,明确的事实是存储的数据存储错误!要将这个字符串重构为一个数组,您必须做的不仅仅是以正确的方式存储它。

所以解决方案可能是来自@sanderbee 的解决方案:将数组的 var_dump 转换回数组变量

或者我建议的解决方案是以正确的方式存储它们。

数据是一个数组,所以这意味着多重数据。要么将其保存为序列化字符串,因此您可以对其进行反序列化,或者我认为更好的解决方案是数据库内部的1-N关系,例如:

表:人类

行:

  • ID
  • 姓名

表:宠物

  • ID
  • Human_ID
  • 种族

所以1 (ONE) Human 可以拥有N (0 直到无穷大) Pets。

表:人类

  • 1、乔治·布什
  • 2、巴拉克·奥巴马

表:宠物

  • 1, 1, 狗
  • 2, 1, 猫
  • 3, 1, 海豚
  • 4、2、普京

所以乔治布什有 3 只宠物:一只狗、一只猫和一只海豚。巴拉克奥巴马只是有一个普京作为宠物。

这样,您可以使用 JOIN 语句通过一个 SQL 查询轻松获取所有数据。

$db->query( 'SELECT Human.Name, Pets.race FROM Human JOIN Pets ON ( Human.id = Pets.Human_ID ) ' );

看起来比反序列化更努力?但是更干净,如果你有很多数据,数据库将比......或者应该......而且它更干净。对我来说看起来更专业。

编辑

您的个人资料看起来您的经验应该足以知道这一点。您是否有可能“必须”在数据库中使用此记录?如果是这样,那么 Sanderbee 的第一个选择就是“必须做的”。

于 2015-06-05T14:43:20.127 回答