Я пытаюсь переключить все мои подключения 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