DB Abfrage scheitert bei Umlauten

  • Hallo!

    Ich habe mir ein kleines Plugin gebastelt, welches ein paar Produkte in der Datenbank hält. Dazu habe ich dann einen kleinen Shortcode erstellt, welcher ein Produkt nach keyword aus der DB holt und anzeigt. Alles kein Problem, bis ich im keyword ein Umlaut habe.

    Gebe ich im Plugincode den SQL String aus (

    SQL
    SELECT * FROM wp_shopprodukte WHERE title like '%anhänger%' OR description like '%anhänger%' LIMIT 0,5


    ) und kopiere ihn in phpmyadmin, bekomme ich ein Ergebnis.

    Ich denke, es hat es was mit der Codierung zu tun. Ich habe bereits versucht, mit utf8_decode/encode den string zu bearbeiten, ohne Erfolg.

    Gibt es da evtl. eine Wordpress Funktion, die mir das abnimmt, oder wie kann ich das gestalten.

    Zu meiner DB:
    MySQL-Zeichensatz: UTF-8 Unicode (utf8)
    MySQL 5.0.27-max-log
    WP:

    PHP
    define('DB_HOST', 'localhost');    // In 99% der F‰lle musst du hier nichts ‰ndern. Falls doch ersetze localhost mit der MySQL-Serveradresse.
    define('DB_CHARSET', 'utf8');	// Der Datenbankzeichensatz sollte nicht ge‰ndert werden
    define('DB_COLLATE', '');

    Vielen Dank,

    Markus

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Wenn dieses Suchkriterum hart im Plugin/Theme so als SQL String geschrieben steht, dann mußt du die *.php Datei, die dies enthält, als UTF-8 ohne BOM Marker speichern, damit die Umlaute UTF-8 encodiert behandelt werden.

    Wenn du es im phpmyadmin eingibst, wir es automatisch UTF-8 encodiert, weshalb es auch funktioniert. Nur wenn es in einer PHP Datei hart steht, wie es offensichtlich dein Codeblock zeigt, hängt es vom encoding der PHP Datei selbst hab.

  • Hi!

    Dieser SQL String ist nicht hart codiert. Er wird mit folgender Funktion erstellt:

    PHP
    function getByKeyword($string,$count=1){
            global $wpdb;
    		$table_name = $wpdb->prefix . "shopprodukte";
    		$sql = 'SELECT * FROM '.$table_name.' WHERE  title like \'%'.$string.'%\' OR description like \'%'.$string.'%\'  LIMIT 0,'.$count;
    //		echo $sql;
            $RelatedProducts = $wpdb->get_results($sql,ARRAY_A);
            return $RelatedProducts;
        }

    also sehr einfach. Ich hatte nur $sql mal ausgegeben, um es per copy paste in phpMyAdmin einzugeben.

    Also an der php-Datei sollte es nicht liegen. Ich habe auch schon $string durch utf8_encode und dergleichen geschickt, ohne Erfolg?

    Ich bin ratlos.

    Einmal editiert, zuletzt von kloeschen (3. August 2009 um 12:31)

  • Danke für den Tipp, leider erfolglos:

  • Versuch es mal hiermit:


    Und werden Fehler ausgegeben?

    PHP
    <?php $wpdb->print_error(); ?>

    wpseek.com - Die WordPress-Code-Suchmaschine

  • Habe mir jetzt erst mal mit dem Workaround geholfen, eben nicht nach Schlüsselanhänger zu suchen, sondern nach sselanh

    Ist nicht so schön, aber jetzt mal zweckmäßig. Trotzdem suche ich noch immer Hilfe bei der richtigen Lösung...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!