1

我开始涉足数组,但并不能很好地工作。我习惯于使用explode/implode 函数,但我认为在这部分代码中数组会让我的生活更轻松。这是调用的函数:

function save_event($event_items = NULL) {
include 'connect.php';

$now = date("Y-m-d H:i:s");
$sqla = "
INSERT INTO `event`(`event_items`, `event_entered`)
    VALUES ('$event_items','$now')";

    $resulta = mysqli_query($link, $sqla);
    if(!$resulta)
        {
        echo '<br/>An error occurred while inserting your data. Please try again later.<br/>';
        }
    else
        { echo 'this is the variable to be stored:<br/>';
          print_r($event_items);

          $sql = "SELECT * FROM `event` WHERE event_entered = '".$now."'";
          $result = mysqli_query($link, $sql);

          if($result)
            { while($row = mysqli_fetch_assoc($result))
                  { echo '<br/></br>This is the value of the database:<br/>';
                    print_r ($row['event_items']);
                  }
            }
          }
}

此函数打印:

this is the variable to be stored:
Array( [0] => Array ( [item] => Powered Speaker [note] => [quantity] => 2 [price] => 200.00 [category] => Audio ) [1] => Array ( [item] => Wireless Microphone [note] => Lavalier [quantity] => 3 [price] => 175.00 [category] => Audio ))

This is the value of the database:
Array

在 phpMyAdmin 中,我在该列event_items中看到的只是Array.

附加信息:我有一个名为 Groups 的表,每个组将有一个或多个订单(另一个名为 Order 的表),每个订单也将有一个或多个事件(另一个表)。最后,每个事件将有一个或多个项目(每个项目都有其相应的价格、数量、注释和类别),它们存储在事件表的一个(或多个)列中。

4

3 回答 3

9

不要试图在一个字段中存储一个数组。您应该将数组中的每个项目存储为相关表中的自己的行。

于 2013-06-20T20:59:40.533 回答
3

您正在尝试在单个数据库记录中插入多个值,这并非不可能,但通常也不建议这样做。

有人这样做的主要原因是为了优化,这根本不是你现在应该担心的事情。

您真正想要做的是查看您的数据库模式,如果您希望存储一个值数组,则需要为每个值创建一个新行(记录)。这可能需要创建另一个表,具体取决于您要执行的操作。

于 2013-06-20T21:04:26.280 回答
2

您可以使用 serialize() 函数序列化您的数组。

例子:

serialize($event_items);

生成值的可存储表示。

这对于在不丢失类型和结构的情况下存储或传递 PHP 值很有用。

http://php.net/manual/en/function.serialize.php

于 2013-06-20T21:01:42.490 回答