我可以将php数组插入单个mysql记录字段吗?

时间:2011-04-26 13:23:08

标签: php mysql arrays insert

假设我们有一个mysql表“table”,其字段为“user”“siblings”,我们希望为每个用户存储此系列信息。

是否可以这样做:

$user=35;
$sibs=array("george","christina");

mysql_query("insert into table (user,siblings) values ('$user','$sibs')");

所以字段“siblings”包含一个数组?

5 个答案:

答案 0 :(得分:3)

您希望使用PHP的serialize()功能。要撤消此过程,请使用unserialize()

来自PHP.net的Snippit:

<?php
// $session_data contains a multi-dimensional array with session
// information for the current user.  We use serialize() to store
// it in a database at the end of the request.

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
      "UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
    $stmt = odbc_prepare($conn,
     "INSERT INTO sessions (id, data) VALUES(?, ?)");
    if (!odbc_execute($stmt, $sqldata)) {
        /* Something went wrong.. */
    }
}
?>

答案 1 :(得分:3)

建立在@David Houde的回答中他提到的帖子也使用压缩来节省空间(如果对你有用):

<?php
mySerialize( $obj ) {
   return base64_encode(gzcompress(serialize($obj)));
}

myUnserialize( $txt ) {
   return unserialize(gzuncompress(base64_decode($txt)));
}
?>

答案 2 :(得分:2)

您可以使用序列化http://ru2.php.net/manual/en/function.serialize.php

但这真的很糟糕。

答案 3 :(得分:2)

您可以使用implode()在值之间添加分隔符。例如,您可以使用管道“|”

e.g。

$user=35;
$sibs=array("george","christina");

$sibs1 = ''.implode('|',$sibs).'|';

mysql_query("insert into table (user,siblings) values ('$user','$sibs1')");

从数据库中提取信息时,请在查询中使用LIKE '%|$var|%'来提取确切的值。例如|克里斯蒂娜|

答案 4 :(得分:0)

是的,您可以在插入之前serialize()数组,或implode()使用您选择的某种分隔符,但我建议您只为每个用户插入单独的行 - &gt;兄弟关系。