我正在尝试将数组保存在MySQL表中,我对其进行了序列化,并显示了类似a:3:{s:8:"One";s:1:"1";s:6:"Two";s:2:"2";
...的内容,但是我不想要这样,我想要这样的{{1 }}或类似的东西(没有那些奇怪的字符{One = 1, Two = 2}
),我试图查找并被告知要反序列化,但这并不是我正在寻找的解决方案,因为它显示了类似"a:4", "s:3"
的内容。有没有办法让它看起来像我在说?
这是我试图反序列化的方法:
{1,2}
答案 0 :(得分:0)
我认为您正在寻找以下内容:
$r9 = array("One"=>"1", "Two"=>"2", "Three"=>"3");
$serializedArray = json_encode($r9); // or use serialize() here
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "INSERT INTO encuesta (id, pregunta, respuesta) VALUES ('".$id."', '".$q9."', '".$serializedArray."')";
if($conn->query($sql) === true){
echo "New record created successfully";
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
mysqli_close($conn);
要再次获得真实数组,请使用以下代码:
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT respuesta FROM encuesta;";
$result = $conn->query($sql);
$row = $result->fetch_array();
$r9 = null;
if(is_array($row) && count($row) > 0){
$r9 = json_decode($row[0], true); // or unserialize() if serialize was used
}
我建议使用json_encode()
。 serialize()
是特定于php的命令。这意味着将来可能与您的数据库交互的其他编程语言将无法使用数据。另外,您json提供了更通用的方式。我认为这更容易阅读。 serialize()
比json_encode()
更强大。但是,因为您没有使用对象,所以您不需要额外的东西。
通常,您正在将数组转换为字符串(使用serialize()
或json_encode()
方法称量)。数据库无法处理数组,因为MYSQL中没有数组。这也是php语言的结构。
生成的字符串等于数组表示形式。 MYSQL可以处理字符串,因此可以将该字符串保存到数据库中。
如果再次从数据库中加载值,则将收到保存的字符串。然后可以使用相反的命令(json_decode()
或unserialize()
)将此字符串转换回数组。