簡體   English   中英

用准備好的語句插入多個選擇數組

[英]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);
}

如之前的stackoverflow說明中所述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM