Je viens de prendre la ce code } de la page Codex de $ wpdb et de modifier ma requête d'insertion existante:
$table = $wpdb->prefix . 'user_req';
$post_id = explode('_', $_POST['post_id']);
$user_id = $_POST['user_id'];
$wpdb->insert(
$table,
array(
'user_id' => $user_id,
'post_id' => $post_id[1]
),
array(
'%d',
'%d'
)
);
dans:
$wpdb->query( $wpdb->prepare(
"
INSERT INTO {$wpdb->prefix}user_req
( user_id, post_id )
VALUES ( %d, %d )
ON DUPLICATE KEY UPDATE
user_id = VALUES(user_id), post_id = VALUES(post_id)
",
$user_id,
$post_id[1]
) );
Parce que j'ai besoin deempêcher les entrées en doubleentrer dans la base de données. Cependant, les entrées en double entrent dans la base de données pendant que la requête d'insertion fonctionne correctement. Pour ajouter la portion ON DUPLICATE KEY UPDATE
, j'ai suivi la Réponse de s_ha_dum } sur un autre thread.
Qu'est-ce que je fais mal?
C'est de ma faute. Vous avez la solution après le commentaire de @ Otto:
Avez-vous réellement une clé en double ici? Quelle est la structure de user_req et quels sont les clés et les index?
Voici comment ma requête SQL devrait être:
INSERT INTO {$wpdb->prefix}user_req
( user_id, post_id )
VALUES ( %d, %d )
WHERE NOT EXISTS (
SELECT * FROM
{$wpdb->prefix}user_req.user_id = user_id
AND
{$wpdb->prefix}user_req.post_id = post_id
)
Correction maintenant. Merci à Otto.
Bien que j'ai dit, c'est résolu, mais en fait, ce n'est pas. Le code ne fonctionnait pas et n'insérait même pas de données ( Détails ici ). Donc, avec la connaissance que j'avais des autres et avec l'aide de mon collègue M. Ariful Haque, je l'ai fait avec deux requêtes différentes mais imbriquées l'une dans l'autre:
$alreadyGot = $wpdb->get_results(
"SELECT
COUNT(*) AS TOTALCOUNT
FROM {$table}
WHERE ( user_id = $user_id AND post_id = $post_id[1] )
AND ( order_id = '' )"
);
$count = $alreadyGot[0]->TOTALCOUNT; //if there's any duplicate, it'd return 1
// if the count return 1, do nothing, but else insert the data
if( $count > 0 ) {
//do nothing
} else {
$wpdb->insert(
$table,
array(
'user_id' => $user_id,
'post_id' => $post_id[1]
)
);
}