Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum bin2hex beim Einfügen von Binärdaten aus PHP in MySQL verwenden?

Das klingt für mich nach einer urbanen Legende.

bin2hex() ordnet jedes Byte in der Eingabe zwei zu Bytes in der Ausgabe ('a' -> '61' ), daher sollten Sie eine deutliche Speicherzunahme des Skripts feststellen, das die Abfrage ausführt - es sollte mindestens so viel Speicher mehr verbrauchen wie die Bytelänge der einzufügenden Binärdaten.

Außerdem bedeutet dies, dass bin2hex() ausgeführt wird an einer langen Saite dauert viel länger als die Ausführung von mysql_real_escape string() , die - wie in der MySQL-Dokumentation - Es werden nur 6 Zeichen maskiert:NULL , \r , \n , \ , , und 'Strg-Z'.

Das war für den PHP-Teil, jetzt für MySQL:Der Server muss die umgekehrte Operation ausführen, um die Daten korrekt zu speichern. Das Umkehren einer der Funktionen dauert fast so lange wie die ursprüngliche Operation - die Umkehrfunktion von mysql_real_escape_string() muss maskierte Werte ersetzen (\\ ) durch nicht maskierte (\ ), während die Umkehrung von bin2hex() müsste jedes einzelne Byte-Tupel ersetzen mit einem neuen Byte.

Seit dem Aufruf von mysql_real_escape_string() auf Binärdaten ist sicher (gemäß der MySQL- und PHP-Dokumentation<). /a> oder selbst wenn man bedenkt, dass die Operation keine anderen Konvertierungen als die oben aufgeführten durchführt), würde es absolut keinen Sinn machen, eine so kostspielige Operation durchzuführen.