Det lyder som en urban legende for mig.
bin2hex()
kortlægger hver byte i input til to bytes i outputtet ('a'
-> '61'
), så du bør bemærke en betydelig hukommelsesforøgelse af scriptet, der udfører forespørgslen - det bør bruge mindst lige så meget hukommelse mere som bytelængden af de binære data, der skal indsættes.
Desuden indebærer dette, at kørsel af bin2hex()
på en lang streng tager meget længere end at køre mysql_real_escape string()
, hvilket - som forklaret i MySQL's dokumentation - undlader bare 6 tegn:NULL
, \r
, \n
, \
, ,
og 'Control-Z'.
Det var for PHP-delen, nu for MySQL:Serveren skal udføre den omvendte handling for at gemme dataene korrekt. At vende en af funktionerne tager næsten lige så lang tid som den oprindelige operation - den omvendte funktion af mysql_real_escape_string()
skal erstatte escapede værdier (\\
) med unescaped (\
), mens det omvendte af bin2hex()
ville være nødt til at erstatte hver og hver byte tuple med en ny byte.
Siden kaldet mysql_real_escape_string()
på binære data er sikkert (ifølge MySQL's og PHP's dokumentation eller selv når man bare tænker på, at operationen ikke udfører andre konverteringer end dem, der er anført ovenfor), ville det absolut ikke give mening at udføre en så dyr operation.