在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
SET
gk
='{“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\”'WHERE
TID
=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打印值时,将不显示任何内容。原因是什么?