Intereting Posts
Пользовательский формат Jqgrid использует скобку (), если значение negatif PHP изменяет размер изображения пропорционально максимальной ширине или весу Пример объектно-ориентированного класса php nginx: connect () не удалось (111: соединение отказано) при подключении к восходящему потоку Многоязычная проблема Woocommerce, Как добавить и отредактировать строку. Прокручиваемая таблица с фиксированным заголовком удалить параметр GET в URL после завершения обработки (не используя POST), PHP Я хочу, чтобы мое поле принимало только целые числа, и я сохранил это поле в требуемой проверке? Magento Rest API – ошибка oAuth Файлы для загрузки Codeigniter Force PHP XPath, выбрав последний элемент соответствия PHP-запись в csv из массива WooCommerce: обновлять настраиваемые поля после отказа проверки проверки Как создать динамическое предложение WHERE mysqli Вход / выход одного веб-сайта влияет на другой веб-сайт на том же сервере

обновить таблицу SQL с несколькими массивами с использованием PDO

Я хотел бы обновить таблицу SQL используя PHP с PDO . Однако я продолжаю получать следующую ошибку

 Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\core\functions\update_projects.php on line 31 

Я просто не могу понять, где я ошибаюсь.

  $j = 1; $chunk_count = count($update)/7; $backwards = array_reverse($update); $chunks = array_chunk($backwards, 7); var_dump($chunks[1]); try { for($i = 0; $i < $chunk_count; $i++ ) { $update_project = $db->prepare(' UPDATE projects SET comments = ?, contact = ?, est_end = ?, est_start = ?, apm = ?, pm = ? WHERE id = ? '); foreach ($chunks[$i] as $field => $val) { $update_project->bindValue($j++, $val, PDO::PARAM_STR); } $update_project->execute(); } echo 'Projects Updated'; } catch(PDOException $e) { die($e->getMessage()); } 

Если я var_dump($chunks[1]) я вижу следующие значения

 array(7) { [0]=> string(13) "some comments" [1]=> string(7) "jim doe" [2]=> string(6) "1-1-14" [3]=> string(7) "12-1-13" [4]=> string(8) "jane doe" [5]=> string(7) "jon doe" [6]=> string(2) "16" } 

Итак, где проблема в моем коде? Любая помощь приветствуется

Это правда, SQL-параметры начинают нумерацию с 1 (я не знаю, почему владелец этого ответа удалил его).

Нумерация параметров определена в стандарте SQL / CLI, который относится к 1980-м годам, до того как был изобретен номер нуль. 😉


Что касается того, почему ваш код не обновляется, я хотел бы убедиться, что значения id расположены там, где вы их ожидаете. После реверсирования и разбиения массива, если значение id не заканчивается в нужном месте, оно может попытаться обновить строки, но не будет соответствовать ни одному.

Вот альтернативный способ кодирования этой процедуры:

 $backwards = array_reverse($update); $chunks = array_chunk($backwards, 7); var_dump($chunks[1]); try { $update_project = $db->prepare(' UPDATE projects SET comments = ?, contact = ?, est_end = ?, est_start = ?, apm = ?, pm = ? WHERE id = ? '); $n = 0; foreach ($chunks as $chunk) { $update_project->execute($chunk); $n += $update_project->rowCount(); } echo 'Projects Updated, affected $n rows'; } catch(PDOException $e) { die($e->getMessage()); }