У меня есть база данных, которая хранит информацию о клиентах. У меня есть уникальное поле для телефонных номеров под названием «Телефон». Я пытаюсь использовать параметризованные запросы для вставки в таблицу, и на дубликат ключа обновить информацию о клиентах. Я четыре раза проверил орфографию, и все кажется на высоте. Я получаю сообщение об ошибке «проверьте … правильный синтаксис для использования рядом с ГДЕ` 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
Оказывается, проблема заключалась в том, что в запросе были дублирующие заполнители. Я изменил это на это
// 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
");
И это сработало!
Других решений пока нет …