Параметризация Вставить … Вкл. Дублирующий ключ UPDATE завершается неудачно с использованием семантики SET

У меня есть база данных, которая хранит информацию о клиентах. У меня есть уникальное поле для телефонных номеров под названием «Телефон». Я пытаюсь использовать параметризованные запросы для вставки в таблицу, и на дубликат ключа обновить информацию о клиентах. Я четыре раза проверил орфографию, и все кажется на высоте. Я получаю сообщение об ошибке «проверьте … правильный синтаксис для использования рядом с ГДЕ` Phone` =? «

    // These are the fields that we want to Upsert
$fields = "`Objectives`  = :objectives,
`LiquidFunds` = :liquidFunds,
`UnitNumber`  = :unitNumber,
`Accredited`  = :accredited,
`FirstName`   = :firstName,
`LastName`    = :lastName,
`Street`      = :street,
`Phone`       = :phone,
`Email`       = :email,
`State`       = :state,
`Notes`       = :notes,
`City`        = :city,
`Zip`         = :zip
";$updateLead = $dbHandle -> prepare("INSERT INTO `Leads` SET $fields
ON DUPLICATE KEY UPDATE $fields WHERE `Phone` = :phoneKey");

А потом я связываю параметры так

    // Bind our parameters to the updateLead query
$updateLead -> bindParam(":objectives" , $objectives);
$updateLead -> bindParam(":liquidFunds", $_POST['liquidFunds']);
$updateLead -> bindParam(":unitNumber" , $_POST['unitNumber']);
$updateLead -> bindParam(":accredited" , $_POST['accredited']);
$updateLead -> bindParam(":firstName"  , $_POST['fname']);
$updateLead -> bindParam(":lastName"   , $_POST['lname']);
$updateLead -> bindParam(":street"     , $_POST['street']);
$updateLead -> bindParam(":phone"      , $_POST['phone']);
$updateLead -> bindParam(":phoneKey"   , $_POST['phone']);
$updateLead -> bindParam(":email"      , $_POST['email']);
$updateLead -> bindParam(":state"      , $_POST['state']);
$updateLead -> bindParam(":notes"      , $_POST['notes']);
$updateLead -> bindParam(":city"       , $_POST['city']);
$updateLead -> bindParam(":zip"        , $_POST['zip']);

Эта точная структура работает отлично, если я изменю запрос на

$updateLead = $dbHandle -> prepare("UPDATE `Leads` SET $fields WHERE `Phone` = :phoneKey);

Я попытался поместить все в одну и ту же строку, и он вывел ту же ошибку (просто на другой «номер строки»). Что, черт возьми, я здесь делаю не так?

PS: я использую PHP / PDO

0

Решение

Оказывается, проблема заключалась в том, что в запросе были дублирующие заполнители. Я изменил это на это

    // These are the fields that we want to Upsert
$fields = "`Objectives`  = :objectives,
`LiquidFunds` = :liquidFunds,
`UnitNumber`  = :unitNumber,
`Accredited`  = :accredited,
`FirstName`   = :firstName,
`LastName`    = :lastName,
`Fronter`     = :fronter,
`Street`      = :street,
`Phone`       = :phone,
`Email`       = :email,
`State`       = :state,
`Notes`       = :notes,
`City`        = :city,
`Zip`         = :zip
";

$updateFields = "`Objectives`  = VALUES(Objectives),
`LiquidFunds` = VALUES(LiquidFunds),
`UnitNumber`  = VALUES(UnitNumber),
`Accredited`  = VALUES(Accredited),
`FirstName`   = VALUES(FirstName),
`LastName`    = VALUES(LastName),
`Fronter`     = VALUES(Fronter),
`Street`      = VALUES(Street),
`Phone`       = VALUES(Phone),
`Email`       = VALUES(Email),
`State`       = VALUES(State),
`Notes`       = VALUES(Notes),
`City`        = VALUES(City),
`Zip`         = VALUES(Zip)
";$updateLead = $dbHandle -> prepare("INSERT INTO `Leads` SET $fields
ON DUPLICATE KEY UPDATE $updateFields
");

И это сработало!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]