2016-07-26 8 views
0

У меня есть база данных, в которой хранится информация о клиентах. У меня есть уникальное поле для телефонных номеров под названием «Телефон». Я пытаюсь использовать параметризованные запросы для INSERT в таблице, а на дубликат - обновлять информацию о клиентах. У меня четверо проверено правописание, и все кажется до пар. Я продолжаю получать ошибку «проверить ... для правильного синтаксиса для использования рядом с WHERE` Phone` =? "Параметрирование вставки ... В дубликатном ключе UPDATE не выполняется с использованием семантики SET

// 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); 

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

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

+1

Возможно, вам нужно прочитать некоторые руководства по поводу 'DUPLICATE KEY UPDATE'? –

+0

Я не уверен, что я следую за –

ответ

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

. То же самое заполняется. Ваша проблема в том, что этот запрос не поддерживает 'WHERE'. –

+0

действительно? .... Почему это, если можно? Знает ли MySQL, какая строка обновляется? (Это имело смысл ...). В то же время я удалил предложение WHERE, а также параметр: phoneKey. Я получаю ошибку «неправильное количество параметров». Я буду рыть. Спасибо за подсказку в любом случае –

+0

Ваш столбец 'Телефон' уникален - mysql определенно знает, какая запись содержит это значение. –