2013-06-20 55 views
0

我開始進入數組,並沒有完全理解它的工作原理。我習慣使用explode/implode函數,但是我通過數組可以使我的生活在這部分代碼中變得更加簡單。這裏是調用的函數:將數組存儲在sql數據庫中

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),每個訂單也有一個或多個事件(另一個表)。最後,每個事件將包含一個或多個項目(每個項目具有相應的價格,數量,註釋和類別),這些項目存儲在Event表格的一個(或多個)列中。

+0

你不能只插入一個數組,並期望它按照你在這裏的方式進行存儲。您可以返回使用爆炸並爆炸或規範化模式並每行存儲一個值。 – mzedeler

+1

'數組'意味着要存儲的變量是數組而不是字符串,因爲它應該是。所以這個問題出現在你的INSERT查詢中。考慮使用'serialize()'和'unserialize()'。 – Voitcus

回答

2

你可以使用serialize()函數序列化你的數組。

實施例:

serialize($event_items); 

生成一個值的可存儲表示。

這對於存儲或傳遞PHP值時很有用,而不會丟失它們的類型和結構 。

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

6

不要嘗試在一個字段中存儲數組。您應該將每個項目存儲在數組中,因爲它在相關表格中是自己的行。

+0

在嘗試創建數組之前,我使用了implode/explode,並且有列名爲item,note,price等的列。是否要走? – cbarg

+0

您應該有一張保存父項的表。 (一個訂單?)和一個保存每個產品的表格(列將是項目,註釋,價格等)。它也應該有order_id。谷歌「數據標準化」,如果你需要更多。 – Jessica

+0

哇,我認爲有些東西我雖然不值得告訴,但我現在看到需要:我有一張名爲Groups的表,每個組都有一個或多個訂單(另一個表稱爲Order),每個訂單都有還有一個或多個事件(另一個表)。最後,每個事件將包含一個或多個項目(每個項目具有相應的價格,數量,註釋和類別),這些項目存儲在Event表格的一個(或多個)列中。 – cbarg

3

您正試圖在一個數據庫記錄中插入多個值,這是不可能的,但它也沒有一般建議。

有人會這樣做的主要原因是爲了優化,這是目前不應該擔心的事情。

你真正想要做的是檢查你的數據庫模式,如果你想存儲一個值的數組,你需要爲每個數據庫創建一個新的行(記錄)。這可能需要創建另一個表,具體取決於你想要做什麼。

+0

我實際上是從這個方法來的!我只是認爲一個數組會更容易處理。現在,序列化/反序列化看起來相當不錯:-) – cbarg

+0

序列化當然是一種可行的方法,但最好是爲記錄創建一個新表。即使在每月有超過50萬獨立訪問者的網站上工作,我們也很少需要爲此進行優化。 –

+1

序列化是用於使用數組 - 不是正確的方式去這裏。 – Jessica