Я искал эту проблему несколькими способами, я не нашел ничего такого, что было бы решено. Голый со мной, так как я новичок в MySQL + PHPМножественные массивы INSERT с подготовленными операциями
Моя БД содержит таблицу с именем «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);
}
С помощью этого кода можно хранить один день в строке в колонке под названием «день» и и значения $ открытия и $ закрытия являются одинаковыми для каждого день.
ОДНАКО, когда «открытие» и «закрытие» сами являются массивами, как «день», Я получил ошибку mysqli_stmt_execute («Преобразование массива в строку»), и поэтому ничего не сохраняется в БД.
Я провел много испытаний с различными конструкциями кода. Я поставил диагноз проблемы в том, что я не могу передать mysqli_stm_execute ($ stmt) более одного массива. У меня не было возможности решить эту проблему.
Все решения, которые я нашел, хранят многие значения в одной строке, но я не хочу этого. Я действительно должен хранить одно время открытия и одно время закрытия за каждый день и хранить каждый день в своей строке.
Надеюсь, что вопрос ясен.