在PHP中使用数组更新表字段
我想用数组更新一个表字段。这意味着我有一个名为在PHP中使用数组更新表字段,php,mysql,Php,Mysql,我想用数组更新一个表字段。这意味着我有一个名为test的表。在该表中,我首先插入了一些行 经过一些处理后,我想用ana数组值更新此表中的一个字段。当我当时将行插入此表时,此字段设置为0 经过一些处理后,一些值返回到变量$var,如: Array ( [id] => "http://www.google.com/calendar/" [etag] => "GEwNTgxHfip7JGA6WhJV" [link] => "http://www.google
test
的表。在该表中,我首先插入了一些行
经过一些处理后,我想用ana数组值更新此表中的一个字段。当我当时将行插入此表时,此字段设置为0
经过一些处理后,一些值返回到变量$var
,如:
Array
(
[id] => "http://www.google.com/calendar/"
[etag] => "GEwNTgxHfip7JGA6WhJV"
[link] => "http://www.google.com/calendar/"
)
这是iam用于更新字段的代码:
$idg= json_encode($var);
mysql_query("UPDATE `test` SET `tk` = '$idg' WHERE `TID` =10");
上面的代码是经过编辑的代码。$idg
现在有:
{"id":"http:\/\/www.google.com\/calendar\/feeds\/testid%40gmail.com\/events\/64h9vc0qqqtlqeqhudhhdqbsds","etag":"\"GEwCQwxGeSp7JGA6WhJV\"\r","link":"http:\/\/www.google.com\/calendar\/feeds\/testid%40gmail.com\/private\/full\/64h9vc0qqqtlqeqhudhhdqbsds\r"}
执行此代码后,字段将更新为
null
值。这是目前面临的问题。由于表列只能包含标量值,因此必须将数组转换为某些字符串表示形式,例如via。当您再次从表中获取值时,您必须将其转换回来,在本例中是通过json_decode()
编辑:或使用可处理此类数据的存储机制/数据库,例如基于文档的数据库,如
edit2:添加参数编码、错误处理和调试代码
<?php
echo "start\n";
$tid = 10;
$idg = json_encode($var);
$idg_sql = mysql_real_escape_string($idg);
$query = "
UPDATE
`test`
SET
`tk` = '$idg_sql'
WHERE
`TID` = $tid
";
$result = mysql_query($query);
if ( !$result ) {
die(mysql_error());
}
if ( 1 < mysql_affected_rows() ) {
// debugging
echo "no affected rows\n";
$result = mysql_query("SELECT Count(*) as c FROM `test` WHERE `TID`=$tid") or die(mysql_error());
while( false!==($row=mysql_fetch_assoc($result)) ) {
var_dump($row);
}
}
echo "done.\n";
使用json_encode()
将数组转换为字符串表示形式,然后可以轻松地将获得的字符串存储在DB表字段中以将整个数组存储在数据库中,通过
并在检索它的同时。将数组转换为字符串值,然后插入到查询中。
例如:
<?php
$var = Array('id' => "http://www.google.com/calendar/",'etag' => "GEwNTgxHfip7JGA6WhJV",'link' => "http://www.google.com/calendar/");
foreach($var as $var1){
$string .= $var1.",";
}
$var = substr($string,0,-1);
echo "UPDATE `test` SET `gk` = '$var' WHERE `TID` =77"; //printing query to check the values
?>
您需要将数据存储在字符串中。
您可以使用php的serialize()函数,也可以在需要时使用json_encode()和json_decode() 您的$var
是一个数组。您需要访问其中一个元素。像$var['id']
你的意思是我无法将$var数组完全更新到表中?这是iam使用json数据进行的查询。更新test
SETgk
='{“id”:“http:\/\/www.google.com\/calendar\/feeds\/test%40gmail.com\/events\/f8uhsjkqvneqif0b0qcdetfog”,“etag”:“GEwCRQZIfSp7JGA6WhJV\”\r”,“link:“http:\/\/www.google.com\/calendar\/feeds\/test%40gmail.com\/private\/full\/full\/f8uhqkqqb0qcdfog\”'WHERETID
=91。但在执行此查询时它不会更新。但在我直接输入phpmyadmin的sql时它会更新。原因是什么?我们需要所有相关的php代码来回答此问题。。。顺便说一句:如果您将结构化数据存储在一个列中,那么如果您希望根据该列中的数据查询记录,那么关系数据库将不会有多大帮助。例如,像“如何输入具有etag GEwCRQZIfSp7JGA6WhJV的链接”这样的查询将导致完整的表扫描+您的php脚本进行实际比较。@沃尔克:现在我可以更新此值,但我无法检索/显示此值,原因是什么?这是我用来选择值的代码:$sql\u sel\u Now=“选择*FROM`test`WHERE`TID`=10”;$res\u sel\u now=mysql\u query($sql\u sel\u now);$result\u sel\u now=mysql\u fetch\u row($res\u sel\u now);$tk=$result\u sel\u now[20];$jtk=stripslashes($tk);$rtk=json\u decode($jtk);print\r($rtk)
。当iam打印值时,将不显示任何内容。原因是什么?