Wie man MySQL Suchanfragen mit Anführungszeichen macht

Hallo allerseits Ich betreibe eine WordPress-basierte Website und ich würde gerne die Suchanfragen speichern, die von den Nutzern aufgerufen werden, um sie als Analysedaten zu verwenden, um zu wissen, was am meisten gesucht wird usw. Also habe ich eine benutzerdefinierte Tabelle, wo die Zeilen sind

query => the searched query counter => how many times this query has been searched for 

So funktioniert alles gut, das einzige Problem, das ich antraf, ist mit Apostroph.

Ich muss die database einchecken, wenn die Abfrage bereits existiert, denn wenn sie bereits existiert, aktualisiere ich einfach den Zähler, sonst füge ich eine neue Zeile ein.

Ich verwende den Standard get_query_var('s') , von dem ich glaube, dass er automatisch von WordPress get_query_var('s') wird.

Die einfache SQL-Abfrage, mit der ich überprüfe, ob die gesuchte Abfrage bereits in der database gespeichert ist, lautet wie folgt:

 $search_query = get_query_var('s'); $wpdb->get_row("SELECT * FROM $table WHERE query = '$search_query'"); if( $wpdb->num_rows == 0 ) { // insert... } else { // update... } 

Ich habe Grund zu der Annahme, dass die Variable in Ordnung ist, da sie korrekt in der database gespeichert ist, ohne zusätzlichen Schrägstrich. Es ist nur die SQL-Abfrage, die ich ausführe, die nicht funktioniert, es gibt keine Ergebnisse zurück und daher fügt es neue Zeilen mit demselben query Wert ein.

Ich bin offen für jede Lösung, auch wenn ich LIKE aber ich glaube, dass es etwas gibt, das ich vermisse und dass die Lösung einfacher ist, als ich dachte, und ich würde lieber den Operator = , da ich die exakte Abfrage abgleichen muss. Vielen Dank im Voraus an euch alle.

PS Es funktioniert gut mit Abfragen ohne Anführungszeichen, es fügt die neuen Abfragen ein und aktualisiert die vorhandenen.

Solutions Collecting From Web of "Wie man MySQL Suchanfragen mit Anführungszeichen macht"

Woah da. Sie haben gerade eine Dose SQL-Injection geöffnet.

Ich verwende den Standard get_query_var (‘s’), von dem ich glaube, dass er automatisch von WordPress entkernt wird.

Nicht ganz – get_search_query() wird das tun, aber get_query_var( 's' ) bekommt den “rohen” Wert.

Unabhängig davon verwenden wpdb::prepare immer wpdb::prepare oder ähnliche wpdb::prepare , bevor Sie SQL ausführen:

 $query = $wpdb->prepare( "SELECT * FROM $table WHERE query = %s", $search_query ); $item = $wpdb->get_row( $query ); if ( $item === null ) { $wpdb->insert( $table, [ 'query' => $search_query ] ); } 

Schauen Sie sich auch die tolle wpdb::insert .