Я изучаю PHP и PDO. Немного путают с обновлением 3 строк в базе данных элементами массива. У меня есть массив данных $dateArray[$index]
, полученный путем выборки из БД и вычисления с помощью других данных. Итак, наконец, этот массив содержит элементы в таком виде:
var_dump($dateArray[$index]);
выходы
string(10) "2018-07-24" string(10) "2018-07-11" string(10) "2018-07-23"
Таблица DB выглядит следующим образом:
Теперь мне нужно записать их в DB (UPDATE хранимые значения) в 3 столбцах: day_remind1
, day_remind2
и day_remind3
а затем отобразить в таблице HTML.
Полагаю, я должен:
Сделать подготовленный отчет PDO с запросом UPDATE;
Организовать цикл операторов bindParam
присваивая поля поля $dateArray[$index]
.
Включите execute
в этом цикле, чтобы поочередно обновлять значения полей БД.
Так вот как я это делаю:
$id = $_POST['id'];
$day = $dateArray[$index];
$sql = "UPDATE birthday_table SET day_remind1=:day, day_remind2=:day, day_remind3=:day WHERE id=:id";
$stmt3 = $pdo->prepare($sql);
foreach ($day as $dates=>$v) {
$stmt3->bindParam(':day_remind1', $day);
$stmt3->bindParam(':day_remind2', $day);
$stmt3->bindParam(':day_remind3', $day);
$stmt3->bindParam(':id', $id);
$id = $v['id'];
$stmt3->execute();
}
$db_handle = new DBController();
// use AJAX variables column, editval, id containig user input
$result = $db_handle->executeUpdate("UPDATE birthday_table SET " . $_POST["column"] . " = '".$_POST["editval"]."' WHERE id=".$_POST["id"]);
'
Это не работает, любые данные, обновленные в БД, любая ошибка, наблюдаемая в консоли. Нужно уточнить, как исправить мой цикл для решения моей задачи.
Вы не привязывали параметры запроса правильно.
когда вы выполняете $stmt3->bindParam(':day_remind1', $day);
, это означает, что вы пытаетесь ввести переменную $day
в заполнителе, названном :day_remind1
.
Но ваши 3 заполнителя в вашем запросе называются :day
. Затем вы должны отредактировать свой запрос до $sql = "UPDATE birthday_table SET day_remind1=:day_remind1, day_remind2=:day_remind2, day_remind3=:day_remind3 WHERE id=:id";
и удалите :
при ожидании параметров:
$stmt3->bindParam('day_remind1', $day);
$stmt3->bindParam('day_remind2', $day);
$stmt3->bindParam('day_remind3', $day);
$stmt3->bindParam('id', $id);
:
при связывании параметров.