我用幾種方式搜索這個問題,我發現沒有什麼完全相同的解決。裸陪我,因爲我是新來的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)多個數組。我沒有選擇如何解決這個問題。
到目前爲止,我發現的所有解決方案都在同一行中存儲了很多值,但我不想那樣做。我實際上需要每天存儲一個開放時間和一個關閉時間,並將每天存儲在自己的行中。
我希望問題清楚。