Intereting Posts
Работа в Cron Система голосования AJAX + PHP PHP – Как обновить данные JSON в txt-файле? Необходимо удалить лишнее пространство между часто задаваемыми вопросами. Использование CSS и Bootstrap html frameset с результатами Google «SAMEORIGIN» Как получить все записи после одного с идентификатором в symfony? Почему бы не хранить PHP SESSION на томе NFS? Полезно ли использовать библиотеку Active Record для CodeIgniters для управления базами данных MySQL или просто использовать SQL? Как шифровать AES 256 CBC в iOS Swift 3 как метод larvel encrypt () Поток FTP загружается в куски с помощью PHP? как поддерживать UTF8 (японский, арабский, испанский, …) URL в PHP Как вы переопределите базу данных по умолчанию в вашей докторантуре по умолчанию для использования ваших локальных настроек? Невозможно изменить параметры построителя модели Эффективная перезагрузка данных / передача данных с сервера на клиент Сертификат для TCPDF

Обновление нескольких столбцов таблицы MySQL с использованием массивов с PDO

Я пытаюсь переключить все мои подключения MySQL из старой mysql_query в PDO. Я пытаюсь обновить несколько строк и столбцов таблицы MySQL, используя разные массивы, и я получаю следующую ошибку:

[42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, чтобы использовать значения «(accnt, car, radio, misc)» («admin», «300.00», «400.00», «10 .00»). Идентификатор WHERE на линии 1

Из следующего кода:

$account = $_POST['account']; $car_lease = $_POST['car_lease']; $radio_lease = $_POST['radio_lease']; $misc_lease = $_POST['misc_lease']; $lease_ID = $_POST['lease_ID']; //$data = array_map(null,$account,$car_lease,$radio_lease,$misc_lease); $A = count($lease_ID); try { $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $STH = $DBH->prepare('UPDATE lease (accnt, car, radio, misc) values (:account, :car_lease, :radio_lease, :misc_lease) WHERE ID = :lease_ID'); $i = 0; while($i < $A) { $STH->bindParam(':account', $account[$i]); $STH->bindParam(':car_lease', $car_lease[$i]); $STH->bindParam(':radio_lease', $radio_lease[$i]); $STH->bindParam(':misc_lease', $misc_lease[$i]); $STH->bindParam(':lease_ID', $lease_ID[$i]); $STH->execute(); $i++; } } catch(PDOException $e) { echo "I'm sorry, but there was an error updating the database."; file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); } 

Я считаю, что эта проблема возникает из-за того, как я вызываю дескриптор инструкции, но я не уверен, какая часть моего синтаксиса неверна. Кроме того, это лучший способ справиться с такими ситуациями? Или есть лучший способ обновить несколько строк в таблице?

Вы смутили синтаксис между операторами INSERT и UPDATE . Вместо списка VALUES() вам нужно предложение SET :

 $STH = $DBH->prepare(' UPDATE lease SET accnt = :account, car = :car_lease, radio = :radio_lease, misc = :misc_lease WHERE ID = :lease_ID '); 

Просмотрите ссылку синтаксиса MySQL UPDATE для полной спецификации для использования с операторами UPDATE .

Простой способ обновления нескольких полей. Но очень важно, чтобы входы на странице редактирования были в том же порядке с вашей базой данных.

надеяться на его помощь

 if (isset($_POST['pageSubmit'])) { echo '<pre>'; print_r($_POST['page']); echo '</pre>'; $fields = array('id','name','title','content','metaKey','metaDescr','metaTitle');//fields array $fields = array_map(function($field){ return "`$field`"; },$fields); $queryArray = array_combine($fields,$_POST['page']);//createng array for query $countFields = count($queryArray);//getting count fields $id = array_splice($queryArray , 0,-($countFields-1));//getting id of page $insertArray = $queryArray;//getting new fields array without first key and value function updatePage($db, array $fields, array $id){ $where = array_shift($id); $sql = array(); foreach ($fields as $key => $value) { $sql[] = "\n".$key."" ." = "."'".$value."'"; } $sql = implode(",",$sql); try { $query = $db->prepare("UPDATE `pages` SET $sql WHERE `id` = $where "); $query->execute(); } catch (Exception $e) { echo $e->getMessage(); } } updatePage($db, $insertArray, $id); } 

лучший способ – CASE , он на 3-4 раза быстрее, чем предустановленный stmt