$ wpdb-> Vorbereitung mit ON DUPLICATE KEY UPDATE

Ich habe diesen Code nur aus der $ wpdb-Codex-Seite genommen und meine vorhandene Insert-Abfrage geändert:

$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' ) ); 

in:

 $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] ) ); 

Weil ich verhindern muss, dass doppelte Einträge in die database gelangen. Aber die doppelten Einträge gehen immer noch in die database ein, während die Einfüge-Abfrage richtig funktioniert. Um den ON DUPLICATE KEY UPDATE Teil hinzuzufügen, folgte ich der Antwort von s_ha_dum auf einem anderen Thread.

Was mache ich falsch?

Solutions Collecting From Web of "$ wpdb-> Vorbereitung mit ON DUPLICATE KEY UPDATE"

Es ist meine Schuld. Habe die Lösung nach @ Ottos Kommentar:

Haben Sie tatsächlich einen doppelten Schlüssel hier? Wie ist die Struktur von user_req und was sind die Schlüssel und Indizes?

So sollte meine SQL-Abfrage lauten:

 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 ) 

Jetzt behoben. Danke an Otto.

AKTUALISIEREN

Obwohl ich sagte, es ist getriggers, aber eigentlich ist es nicht. Der Code funktionierte irgendwie nicht und fügte nicht einmal Daten hinzu ( Details hier ). Mit dem Wissen, das ich von den anderen hatte, und mit Hilfe meines Kollegen, Herrn Ariful Haque, habe ich es mit zwei verschiedenen, aber ineinander greifenden Fragen gemacht:

  $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] ) ); }