Как удобно обновить 3 строки в таблице БД по элементам массива с помощью PHP PDO?

0

Я изучаю 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 выглядит следующим образом: Изображение 174551

Теперь мне нужно записать их в DB (UPDATE хранимые значения) в 3 столбцах: day_remind1, day_remind2 и day_remind3 а затем отобразить в таблице HTML.

Полагаю, я должен:

  1. Сделать подготовленный отчет PDO с запросом UPDATE;

  2. Организовать цикл операторов bindParam присваивая поля поля $dateArray[$index].

  3. Включите 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"]);

'

Это не работает, любые данные, обновленные в БД, любая ошибка, наблюдаемая в консоли. Нужно уточнить, как исправить мой цикл для решения моей задачи.

  • 0
    какой у тебя вопрос / проблема?
  • 0
    @VaN, извините, обновил мой вопрос, спасибо
Показать ещё 4 комментария
Теги:
loops
pdo

1 ответ

0

Вы не привязывали параметры запроса правильно.

когда вы выполняете $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);
  • 0
    Отредактированный запрос, но, к сожалению, безрезультатно.
  • 0
    Отредактировав мой ответ, вы также должны удалить : при связывании параметров.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню