SQL propose plusieurs méthodes pour insérer ou mettre à jour des enregistrements dans une table de base de données en fonction de l'existence d'une clé unique. Ce guide explique pourquoi ce que vous avez essayé ne fonctionne pas et propose deux solutions testées à l'aide de l'instruction INSERT ... ON DUPLICATE KEY UPDATE
de MySQL.
Pourquoi votre tentative a échoué
ON DUPLICATE KEY UPDATE
, mais il manque une contrainte unique dans votre colonne subs_email
, ce qui entraîne l'échec de la requête. IF EXISTS
et BEGIN/END
que vous essayez d'utiliser ne sont pas une syntaxe SQL valide pour MySQL. Solution 1 : Créez une contrainte unique et utilisez INSERT ... ON DUPLICATE KEY UPDATE
subs_email
: <code class="language-sql">ALTER TABLE subs ADD UNIQUE (subs_email);</code>
<code class="language-sql">INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE subs_name = VALUES(subs_name), subs_birthday = VALUES(subs_birthday);</code>
Solution 2 : Instruction préparée paramétrée à l'aide de ON DUPLICATE KEY UPDATE
<code class="language-java">String sql = "INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES (?, ?, ?)" + " ON DUPLICATE KEY UPDATE subs_name = ?, subs_birthday = ?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, name); preparedStatement.setString(2, email); preparedStatement.setString(3, birthday); preparedStatement.setString(4, name); // 重复键更新的第二个参数 preparedStatement.setString(5, birthday); // 重复键更新的第三个参数 preparedStatement.executeUpdate();</code>
N'oubliez pas d'utiliser des espaces réservés pour les paramètres pour empêcher les attaques par injection SQL.
En appliquant ces solutions, vous pouvez insérer ou mettre à jour efficacement des enregistrements dans les tables de base de données en fonction du caractère unique des subs_email
colonnes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!