J'ai une base de données qui stocke des informations sur les clients. J'ai un champ unique pour les numéros de téléphone appelé "Téléphone". J'essaie d'utiliser des requêtes paramétrées pour INSÉRER dans la table, et sur une clé en double, mettre à jour les informations des clients. J'ai quadruple vérifié l'orthographe, et tout semble à la hauteur. Je continue à obtenir l'erreur "vérifier ... pour la syntaxe correcte à utiliser près de WHERE` Phone` =? "Parameterize Insert ... Sur la clé dupliquée UPDATE échoue en utilisant la sémantique 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"
);
Et plus tard, je suis liant les paramètres comme si
// 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']);
Cette structure exacte fonctionne parfaitement si je change la requête à
$updateLead = $dbHandle -> prepare("UPDATE `Leads` SET $fields WHERE `Phone` = :phoneKey);
J'ai essayé de mettre tout sur le même ligne, et il a jeté la même erreur (juste sur un "numéro de ligne" différent). Qu'est-ce que je fais mal ici?
PS: J'utilise PHP/AOP
Peut-être que c'est pour lire quelques manuels sur 'DUPLICATE KEY UPDATE'? –
Je ne suis pas sûr de suivre –