2016-05-19 5 views
0

Я искал эту проблему несколькими способами, я не нашел ничего такого, что было бы решено. Голый со мной, так как я новичок в 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) более одного массива. У меня не было возможности решить эту проблему.

Все решения, которые я нашел, хранят многие значения в одной строке, но я не хочу этого. Я действительно должен хранить одно время открытия и одно время закрытия за каждый день и хранить каждый день в своей строке.

Надеюсь, что вопрос ясен.

ответ

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

Смежные вопросы