[英]INSERT multiple select arrays with prepared statements
我的數據庫包含一個名為“ 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值),並且“天”是定義為“天[]”的數組,則一切工作正常。 為此,我將准備好的語句用作:
$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);
}
使用此代碼,我可以將每行一天存儲在名為“ day”的列中,並且$ opening和$ closing的值每天相同。
但是,當“ opening”和“ closing”本身是數組時,就像“ day”一樣,我遇到了mysqli_stmt_execute錯誤(“ Array to string conversion”),因此沒有任何內容存儲到數據庫中。
我用不同的代碼結構做了很多測試。 我診斷出問題是我不能傳遞mysqli_stm_execute($ stmt)多個數組。 我沒有解決該問題的選擇。
到目前為止,我發現的所有解決方案都將許多值存儲在同一行中,但我不希望這樣。 實際上,我每天需要存儲一個打開時間和一個關閉時間,並將每一天存儲在自己的行中。
我希望問題清楚。
解決了:
我必須循環綁定:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.