2016-05-19 33 views
0

我用幾種方式搜索這個問題,我發現沒有什麼完全相同的解決。裸陪我,因爲我是新來的MySQL + PHPINSERT多個選擇數組與準備語句

我的數據庫包含了一個名爲「opening_days_hours」表:

CREATE TABLE IF NOT EXISTS opening_days_hours (
     ID_OpeningHours bigint(20) NOT NULL AUTO_INCREMENT, 
     ID_Address bigint(20) NOT NULL, 
     opening time NOT NULL, 
     closing time NOT NULL, 
     day  int(11) NOT NULL DEFAULT 0, 
     INDEX (ID_Address), 
     PRIMARY KEY (ID_OpeningHours), 
     CONSTRAINT FK_Addresses_OpeningHours 
     FOREIGN KEY (ID_Address) REFERENCES addresses(ID_Address) 
     ON DELETE CASCADE) ENGINE=InnoDB 

每天有且僅有一個「開放」和「關閉」的時間。而時間由用戶經由「選擇」語句(下拉)傳遞

的「日」的列值是從「複選框」值獲得

<input type="checkbox" id="sun" name="days[]" "<?php if (isset($days) && $days=="days") echo "checked"; ?>" value="1"> 
...same for mon, tue, wed, etc. 

如果'打開'和'關閉'是標量(1值),'day'是定義爲'days []'的數組,一切正常。對於這一點,我用準備好的語句爲:

$q = "INSERT INTO opening_days_hours 
        day, 
        opening, 
        closing 
        ID_Address 
        ) VALUES (?, ?, ?, ?)"; 

    $days = array(); 
    if(isset($_POST['days'])) { 
    $days = $_POST['days']; 
    } 

    mysqli_stmt_bind_param($stmt, 'issi', 
         $days, 
         $opening, 
         $closing, 
         $ID_Address 
         ); 

    foreach ($days as $one) { 
     mysqli_stmt_execute($stmt); 
    } 

有了這個代碼,我可以每行一個天存儲在名爲「天」和和 $開放的價值觀和列$收盤是每一個相同天。然而,'打開'和'關閉'本身就是數組,就像'日'一樣, 我得到了一個mysqli_stmt_execute錯誤('數組到字符串轉換'),因此沒有任何東西存儲到數據庫中。

我做了很多不同的代碼構造的測試。我診斷問題是我無法通過mysqli_stm_execute($ stmt)多個數組。我沒有選擇如何解決這個問題。

到目前爲止,我發現的所有解決方案都在同一行中存儲了很多值,但我不想那樣做。我實際上需要每天存儲一個開放時間和一個關閉時間,並將每天存儲在自己的行中。

我希望問題清楚。

回答

0

解決:

我不得不循環的結合:

for ($i = 0; $i < count($days); ++$i) 
    { 
     mysqli_stmt_bind_param($stmt, "issi", 
           $days[$i], 
           $opening[$i], 
           $closing[$i], 
           $ID_Address 
         ); 

    mysqli_stmt_execute($stmt); 
} 

在此之前的stackoverflow explanation

解釋