2012-03-23 2 views
0

Я хочу, чтобы uapdate поле таблицы с массивом. Это означает, что у меня есть таблица с именем test. В этой таблице я вставил несколько строк в первую очередь.Обновление поля таблицы с массивом в PHP

После некоторого процесса я хочу обновить поданную в этой таблице значение ana array. Когда я вставляю строки в эту таблицу, в это время это значение имеет значение 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"); 

Приведенный выше код является отредактированный код .The $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"} 

После прочтения этого кода поле w плохо обновлено с null значением. Это проблема, с которой сталкивается сейчас.

+1

Ваш '$ var' - это массив. вам нужно получить доступ к одному из его элементов. например '$ var ['id']' – hjpotter92

+0

, вы имеете в виду, что я не могу полностью обновить массив $ var в таблице? – Kichu

ответ

1

Поскольку столбец таблицы может содержать только скалярное значение, вам необходимо преобразовать массив в некоторое строковое представление, например. через json_encode().
Когда вы снова извлекаете значение из таблицы, вы должны его вернуть, в этом случае через json_decode().


Редактировать: или использовать механизм хранения/базу данных, которые могут обрабатывать данные этого типа, например. база данных на основе документов, такая как mongodb.


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"; 
+1

Это запрос iam, использующий данные json. ** UPDATE 'test' SET' gk' = '{"id": "http: \/\/www.google.com \/calendar \/feeds \ /test%40gmail.com \/events \/f8uhsjkqvneqif0b0qucdetfog", "ETag": "\" GEwCRQZIfSp7JGA6WhJV \ "\ г", "ссылка": "HTTP: \/\/www.google.com \/календарь \/каналы \ /test%40gmail.com \/частное \/\ полная/f8uhsjkqvneqif0b0qucdetfog \ r "} 'WHERE' TID' = 91 **. Но он не обновляется, когда выпрашивается этот запрос. Но он обновляется, когда я напрямую предоставляю sql.ppmyadmin. В чем причина этого? – Kichu

+0

нам нужно _all_ _relevant_ php code ответить на этот вопрос ...btw: если вы храните структурированные данные в одном столбце, реляционная база данных не будет очень полезной, если вы хотите запрашивать записи на основе данных в этом столбце. Например. такой запрос, как «Как вошла ссылка, имеющая etag GEwCRQZIfSp7JGA6WhJV», приведет к полному сканированию таблицы + ваш скрипт php, выполняющий фактическое сравнение. – VolkerK

+0

Вопрос теперь отредактирован. – Kichu

0

Преобразование вам массив в представление строки, используя json_encode() затем полученную строку можно легко хранить в таблице поле БД

0

Преобразование массива в строковое значение, а затем вставка в запрос. Например:

<?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 

?> 
0

Вы должны хранить данные в виде строки. Вы можете либо использовать функцию serialize() php, либо использовать json_encode() и json_decode() при необходимости.

Смежные вопросы