この問題をいくつかの方法で検索したところ、全く同じ問題は解決されませんでした。私と一緒に裸の私は、MySQL + PHPに新しいですので、プリペアドステートメントを使用して複数の選択配列を挿入する
私のDBは、「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.
として「チェックボックス」値から得られます。
'opening'と 'closing'がスカラー(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);
}
を$ごとに同じであること閉じます日。 mysqli_stmt_executeエラー( '配列から文字列への変換')を取得したため、DBに何も格納されません。
私はコードの異なる構成で多くのテストを行いました。 mysqli_stm_execute($ stmt)を複数の配列に渡すことができないという問題を診断しました。私はこの問題を解決する方法の選択肢がなくなった。
私が今までに見つけた解決策は、同じ行に多くの値を格納していましたが、私はそれを望んでいません。私は実際に、1日に1つの営業時間と1つの営業時間を保管し、毎日その行に保管する必要があります。
私は問題がはっきりしていることを願っています。