6
votes

Pouvez-vous utiliser une déclaration préparée dans MySQL avec "sur la mise à jour de la clé en double"?

Je ne trouve aucune référence à l'utilisation de déclarations préparées avec "sur la mise à jour de la clé en double" avec MySQL et PHP. Ai-je raison de penser que cela n'est pas possible?

-Jim


0 commentaires

3 Réponses :


0
votes

Vous pouvez certainement utiliser sur la mise à jour de clé en double avec php + mySQL. L'as tu essayé? Si vous avez, quel problème avez-vous rencontré?


1 commentaires

Désolé, ma question n'était pas claire, alors je l'ai modifiée. J'ai utilisé plusieurs fois sur la mise à jour de clé en double, mais jamais avec une déclaration préparée. J'ai regardé plusieurs endroits pour obtenir des instructions sur la manière dont cela pourrait être fait mais rien trouvé. Avant de gaspiller un après-midi sur une expérimentation futile, je pensais vérifier si quelqu'un peut confirmer que cela est réellement réalisable. -Jim



1
votes

Vous devriez pouvoir exécuter chaque requête SQL en tant que déclaration préparée. Je ne sais pas pourquoi vous pensez qu'il y aurait une exception pour sur la mise à jour de clé en double . Essayez-le d'abord et demandez-nous s'il y a des problèmes.


1 commentaires

Merci emil. Je vais essayer, bien que je ne puisse pas imaginer comment cela fonctionnerait. Ajoutez-vous la mise à jour de clé en double à la requête dans mysqli_prepare et que les valeurs de remplacement sont aussi? Des marques? Si cela fonctionnera, cela me serait très utile. Je vais faire rapport sur mes résultats, bien que cela puisse être un peu avant d'avoir le temps d'essayer cela. Jim



20
votes

Voici un exemple généralisé de cette utilisation:

$db->prepare('
INSERT INTO tableName (id, col1, col2, col3...)
VALUES (?,?,?,?)
ON DUPLICATE KEY
UPDATE  col1 = VALUES(col1),
        col2 = VALUES(col2),
        col3 = VALUES(col3)
');

$stmt->bind_param('isss',
                  $id,
                  $col1,
                  $col2,
                  $col3
                 );
$db->execute($stmt);

if ($id == null) { //If you need the auto increment from the insert.
  $newId = $stmt->insert_id;
}


0 commentaires