L'article suivant vous apporte une solution parfaite au problème de l'insertion des mêmes données dans Thinkphp3.2. Le contenu est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence.
Description du problème
Lors de l'insertion de données à l'aide de TP3.2 aujourd'hui, afin d'éviter d'insérer les mêmes données (les soi-disant mêmes données , sa clé primaire est la même ou les champs de l'index unique sont les mêmes). L'index que j'ai créé est comme indiqué ci-dessous. L'index de clé primaire est un champ à incrémentation automatique est impossible, c'est-à-dire l'index unique. peut être dupliqué. Ce que je veux, c'est l'uid, l'année, le mois, le jour. Si les trois champs apparaissent identiques, 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, le nouvel enregistrement sera mis à jour, sinon l'enregistrement sera inséré.
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 un morceau de données
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 et 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 puis insère un 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.
Recommandations associées :ajout, suppression, modification de la base de données de la version thinkphp3.2.3 et vérification du code d'implémentation
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!