sprintf und float-Zahlen in mySQL-Querys

Floats, also Fließkommazahlen, in eine DB zu schreiben sollte man können. Dachte ich bis vor kurzem 😉

Und deshalb, vor allem als Hinweis an mich selbst: Falls ein Query mit einem – vorher bereits vom Punkt befreiter, das Komma in Punkt umgewandelten – String plötzlich nicht mehr korrekt ausgeführt wird, dann liegt das höchstwahrscheinlich an zwei Sachen; allein, eine war mir dann neu:

  1. Du übergibst deinem Query die Parameter via sprintf (oder äquivalenten davon) und (jetzt kommt das neue)
  2. dein Server spricht plötzlich Deutsch!

Um einen fehlerhaften Query aber dauerhaft zu vermeiden, setze ich vor meinen Query nun die Sprache des Systems auf die Sprache der Datenbank und dannach wieder zurück. Den Quellcode habe ich stark vereinfacht mal hier angefügt.


// Wechsel zur internen Sprache der DB, als Beispiel fest im Code
$old = setlocale(LC_NUMERIC, NULL);
setlocale(LC_NUMERIC, 'us_US');

// Query ausführen. Werte im Query werden via sprintf eingegeben
// ...

// Zurück zur normalen Einstellung
setlocale(LC_NUMERIC, $old);

Ich hoffe, ich kann damit mal jemanden aus der Patsche helfen, wahrscheinlich bin ich aber wieder mal selbst mein bester Kunde 😉

5 Gedanken zu „sprintf und float-Zahlen in mySQL-Querys

  1. Oliver

    Irgendwie verstehe ich das Problem grade nicht.

    setlocale(LC_ALL, ‚de_DE‘);
    echo sprintf(„Ein Float: %.2F“, „12345.678“);
    ?>

    => Ein Float: 12345.68

    Antworten
  2. Sascha Presnac

    @Oliver: So hatte ich es ursprünglich auch und es hat auch lange funktioniert. Bis vor kurzem. Lange Suche, kurze Ursache: Die Zahl wurde mit , statt . als Dezimal-Separator übertragen; der Workaround dazu ist im Beitrag beschrieben.

    Antworten

Schreibe einen Kommentar zu Sascha Presnac Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.