【发布时间】:2016-09-16 23:56:40
【问题描述】:
我的数据库包含一个名为“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
每一天都包含一个且只有一个“开始”和“结束”时间。
“day”列值是从“checkbox”值中获取的
<input type="checkbox" id="sun" name="days[]" "<?php if (isset($days) && $days=="days") echo "checked"; ?>" value="1">
...same for mon, tue, wed, etc.
而时间是由用户通过“选择”语句(下拉菜单)传递的。
如果 'opening' 和 'closeing' 是标量(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);
}
使用此代码,我可以在名为“day”的列中每行存储一天,并且 $opening 和 $close 的值每天都相同。
但是,当 'opening' 和 'closeing' 本身是数组时,就像 'day' 一样, 我得到了一个 mysqli_stmt_execute 错误(“数组到字符串的转换”),因此没有任何内容存储到数据库中。
我用不同的代码结构做了很多测试。我诊断出问题是我不能通过 mysqli_stm_execute($stmt) 多个数组。我没有办法解决这个问题。
到目前为止,我发现的所有解决方案都在同一行中存储了许多值,但我不希望这样。我实际上需要每天存储一个开放时间和一个关闭时间,并将每一天存储在自己的行中。
我希望问题很清楚。
【问题讨论】:
标签: php arrays mysqli drop-down-menu prepared-statement