L'éditeur suivant vous proposera un article qui résout parfaitement le problème de l'insertion des mêmes données dans Thinkphp3.2. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil.
Description du problème
Lors de l'insertion de données à l'aide de TP3.2 aujourd'hui, afin d'éviter d'insérer le mêmes données (les soi-disant mêmes données, sa clé primaire est la même ou le champ de l'index unique est le même), l'index que j'ai créé est comme indiqué ci-dessous, l'index de clé primaire est un champ à incrémentation automatique, il y a aucune possibilité de duplication, c'est-à-dire que l'index unique peut être dupliqué, ce que j'espère est que si les trois champs uid, année, mois et jour sont les mêmes, l'enregistrement actuel sera mis à jour.
Solution du problème
Quand nous avons été confrontés à un tel problème auparavant, nous, vous savez, MySQL fournit ON DUPLICATE KEY UPDATE ou REPLACE INTO pour résoudre ce problème.
Utiliser ON DUPLICATE KEY UPDATE
Avant d'insérer des données, il n'y a qu'un seul enregistrement dans le tableau, comme indiqué ci-dessous
L'instruction SQL est la suivante, lors de l'insertion d'un enregistrement, s'il est identique à l'enregistrement existant dans la table, mettez à jour l'enregistrement, sinon insérez l'enregistrement.
INSERT INTO `work_log` ( `uid`, `year`, `mounth`, `day`, `status` ) VALUES (1, 2016, 6, 3, 1) ON DUPLICATE KEY UPDATE `status` = VALUES (`status`), `updated_ts` = NOW();
Utilisez REPLACE INTO
Le code est le suivant :
Exécutez d'abord le code suivant pour insérer une donnée
REPLACE INTO `work_log` ( `uid`, `year`, `mounth`, `day`, `status` ) VALUES (1, 2016, 6, 2, 1)
L'effet est comme indiqué ci-dessous
Exécutez à nouveau le code suivant, le code inséré ci-dessus sera mis à jour
REPLACE INTO `work_log` ( `uid`, `year`, `mounth`, `day`, `status` ) VALUES (1, 2016, 6, 2, 5)
L'effet est comme indiqué ci-dessous
La différence entre ON DUPLICATE KEY UPDATE et REPLACE INTO
Lorsque la même valeur apparaît , ON DUPLICATE KEY UPDATE met à jour l'enregistrement existant et REPLACE INTO supprime l'enregistrement précédent et insère le nouvel enregistrement.
Solution dans Thinkphp3.2
Dans Thinkphp3.2, l'insertion est gérée de la même manière via le troisième paramètre de la fonction add() Problèmes de données.
La méthode add() dans Model.class.PHP appelle la méthode insert dans Db.class.php Dans la méthode insert, nous pouvons voir le code suivant :
<.>
Où $replace se trouve être le troisième paramètre de la méthode add.
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!