Moin!
Wenn ich eine Zahlenfolge wie diese hier abspeichere: 0160123456 dann wird beim speichern die 1. null gelöscht. Wie ich bereits gelesen habe liegt das daran, dass ich die Funktion quote_smart nutze. Diese Funktion sieht wie folgt aus:
function quote_smart($value)
{
// In Anführungszeichen setzen, sofern keine Zahl oder ein numerischer String vorliegt
if(!is_numeric($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}return $value;
}
Diese Funktion ist Müll.
Irgendwann hat mir wer geraten diese "so tolle" funktion zu nutzen.
Einer aus diesem Forum? Ich hoffe nicht.
Egal, wer es war: Er hat dir Unsinn erzählt. Die in der Funktion vorgenommene Ausnahmebehandlung für numerische Inhalte ist das Problem. Sie ist erstens nicht notwendig (auch Nummern dürfen im SQL-String in Anführungszeichen stehen, das stört MySQL gar nicht - es muß die Nummern sowieso wieder aus dem SQL-String rausparsen), und zweitens ist man auf der sicheren Seite, wenn man sowieso alle variablen SQL-Inhalte durch mysql_real_escape_string durchschleust.
Deine wahnsinnige Funktion reduziert sich also auf:
function quote_smart($value) {
return "'".mysql_real_escape_string($value)."'";
}
Allerdings hat das gewisse Nachteile: Erstens gehören die Anführungszeichen zum statischen SQL-Statement, nicht zum Value.
Zweitens erfordert mysql_real_escape_string() eine bestehende MySQL-Verbindung, denn deren aktuelle Zeichencodierung fließt mit in das Ergebnis ein.
Und drittens ist es einfach blödsinnig, einen Funktionsaufruf zu schreiben, der einfach nur eine andere Funktion aufruft, aber sonst nichts tut.
Wieso wird bei einer zahl immer die 1. Null weg gestrichen? bzw. kann man das irgendwie in der konfiguration von mysql abstellen?
Du hast diese Funktion in deinen Code integriert. Du solltest eigentlich wissen, was sie tut, und daher auch wissen, wie man das abstellt.
Mein Ratschlag: Wirf die Funktion ganz raus. Das erfordert dann noch einmalig ein wenig Umbauarbeiten an den betroffenen SQL-Strings, aber das war's dann auch.
Alternativ nutze die mysqli-Funktionen - die haben Prepared Statements etc., bei denen man sich lokales Escaping sparen kann.
- Sven Rautenberg
"Love your nation - respect the others."