Je ne suis pas très familier avec WPDB ou SQL en général, mais j'ai une table personnalisée pour mon projet et j'essaie de lui attribuer des métadonnées. Ce que j'aimerais "se produire", c'est si une ligne existe, la mettre à jour et sinon l'insérer. J'ai lu à la fois Insérer et Mettre à jour dans le codex WPDB, mais ni l'un ni l'autre n'est vraiment entré dans une situation "non plus". Je pensais que je pouvais travailler avec la mise à jour, donc mon code ressemble jusqu'à présent à ceci:
$wpdb->update(
$wpdb->prepare(
$wpdb->prefix.'item_info',
array(
'post_id' => $post_id,
'item_stock' => $item_stock
),
array('post_id' => $post_id)
)
);
WordPress a-t-il quelque chose comme une «mise à jour IF existe, une insertion ELSE», ou dois-je exécuter un SQL personnalisé pour y parvenir, ou dois-je d'abord interroger la base de données pour voir si un ID existe dans ma table PUIS décider de mettre à jour ou l'insérer?
As-tu essayé
$wpdb->replace
. Selon WP Codex:Remplacez une ligne dans un tableau si elle existe ou insérez une nouvelle ligne dans un tableau si la ligne n'existait pas déjà.
Je me suis essayé dans certains plugins et il fait le travail en essayant d'éviter les erreurs de duplication d'ID uniques, etc.
Plus d'informations dans le codex
la source
$wpdb->replace
s'agit d'un écrasement destructeur de l'ensemble de l'enregistrement, alors qu'il$wpdb->update
ne met à jour que les champs spécifiques inclus dans le$data
tableauVous devez vérifier si la ligne existe en premier.
Vous voudrez probablement essayer d'obtenir l'ID ou la clé primaire de la ligne que vous essayez de mettre à jour, alors
$wpdb->update
si c'est le cas ou si$wpdb->insert
ce n'est pas le casla source