Php 在MYSQL中更新值序列化数组时遇到问题
这就是我要做的Php 在MYSQL中更新值序列化数组时遇到问题,php,mysql,serialization,Php,Mysql,Serialization,这就是我要做的 - extract my serialize array from databse - deserialize it - change the value - after changing I serialize it - then write it back to MYSQL database table. 但是我很难将它写回MYSQL数据库表 $myarray = Array ( [dogname] => Array (
- extract my serialize array from databse
- deserialize it
- change the value
- after changing I serialize it
- then write it back to MYSQL database table.
但是我很难将它写回MYSQL数据库表
$myarray = Array
(
[dogname] => Array
(
[0] => white
[1] => zeon
[2] => imao
)
[visit] => Array
(
[0] => once
[1] => twice
[2] => twice
)
}
我用这种方式将它保存到我的表中serialize($myarray)
现在我提取它并取消序列化
$unserializearray = unserialize($myserialarray);
then search for array value to change and back to table
$keys = array_keys($unserializearray['dogname'], 'imao', true);
foreach($keys as $key)
{
// find dogname imao and change its visit to once
$unserializearray['visit'][$key] = "once";
$update = serialize($unserializearray);
//save the update
mysql_query("UPDATE dogdetails SET checkup = '$update'
WHERE dogid = '1'");
}
但是它不能直接保存到mysql中,我会错过代码中的某些内容吗?首先,如果数组中的某些内容只有一个引号,那么这是行不通的,所以您需要这样做
$update=mysql_real_escap_string(serialize($unserializearray),$dbhandle);
或者朋友
更重要的是,在我看来,您的数据库设计似乎存在严重缺陷:正如这里多次提到的那样,如果您希望单独访问字段,则不应在字段中存储多个值。在您的情况下,您用三只狗的内脏存储了三只狗,但您希望分别访问它们-这就是您的代码所做的。正如Eugen所说,您的代码有很多地方出错 除此之外,该代码是否工作得更好:
$unserializearray = unserialize($myserialarray);
then search for array value to change and back to table
$keys = array_keys($unserializearray['dogname'], 'imao', true);
foreach($keys as $key)
{
// find dogname imao and change its visit to once
$unserializearray['visit'][$key] = "once";
}
$update = mysql_real_escap_string(serialize($unserializearray));
//save the update
mysql_query("UPDATE dogdetails SET checkup = '$update' WHERE dogid = '1'");
为什么它保存不正确?如果“once”是一个字符串,它应该被引用