J'insère une ligne dans une table personnalisée dans une base de données wordpress. c'est le code:
$wpdb->insert( 'wp_pl_my_parts',
array(
'user_ID' => $user_ID,
'PL_part_ID' => $PL_part_ID,
'part_save_date' => $part_save_date ), array( '%d', '%d', '%s' ) );
Comment puis-je m'assurer de ne pas insérer une entrée dupliquée? C'est à dire. Je ne veux pas qu'il soit inséré si les identifiants user_ID et PL_part_ID sont identiques à un enregistrement existant?
La date n'a pas d'importance et ne doit pas être vérifiée.
Disons que la clé primaire de la table est my_part_ID
. Nous allons donc vérifier s'il existe une valeur de clé primaire pour la combinaison de user_ID
et PL_part_ID
comme ci-dessous
$my_part_ID = $wpdb->get_var(
$wpdb->prepare(
"SELECT my_part_ID FROM " . $wpdb->prefix . "pl_my_parts
WHERE user_ID = %d AND PL_part_ID = %d LIMIT 1",
$user_ID, $PL_part_ID
)
);
if ( $my_part_ID > 0 )
// exists
else
// does not exist
Créez simplement votre table de base de données avec un index UNIQUE
(ou des index) pour éviter les doublons. Voir MySQL: Syntaxe CREATE INDEX pour commencer. Pour plus de détails sur WordPress, consultez Codex: créer des tables avec des plugins - Créer des tables de base de données . L'exemple de code ci-dessous provient de là:
global $wpdb;
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
name tinytext NOT NULL,
text text NOT NULL,
url VARCHAR(55) DEFAULT '' NOT NULL,
UNIQUE KEY id (id)
);";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
Le but de cette réponse est d'éviter le problème rencontré auparavant par le PO. Cela signifie en concevant, en planifiant et en le configurant de manière à ce que le problème ne puisse pas se produire en premier lieu.
J'ai trouvé le meilleur moyen de vérifier si un enregistrement existe ou non avec WPDB est de vérifier d'abord avec la fonction de mise à jour de WPDB. Un exemple de ceci pourrait être:
if(!$wpdb->update($wpdb->prefix.'table_name',$data,array('id'=>$dbRowId),array('%s'),array('%d'))){
$wpdb->insert($wpdb->prefix.'table_name',$data,array('%s'));
return $wpdb->insert_id;
}else{
return $dbRowId;
}
Elle est un peu plus grosse que vous ne le voudriez peut-être en termes de fonction globale, mais si vous la configurez comme méthode appelable dans un modèle ou une classe de base de données dans votre plugin ou votre thème, vous pouvez la gérer avec les fonctionnalités de WPDB.
global $wpdb;
$table_user = $wpdb->prefix . 'user';
$PL_part_ID= $_POST['PL_part_ID'];
// first check if data exists with select query
$datum = $wpdb->get_results("SELECT * FROM $table_user WHERE PL_part_ID= '".$PL_part_ID."'");
if($wpdb->num_rows > 0) {
echo "result exists";
}
// if not exist in the database then insert it
else{
$result = $wpdb->insert(
$table_token,
array(
'Firstname' => $_POST["value1"],
'Surname' => $_POST["value2"],
'Month' => $_POST["value3"],
'Day' => $_POST["value4"],
'Email Address' => $_POST["value5"]
)
);
}