To mi zní jako městská legenda.
bin2hex()
mapuje každý bajt na vstupu na dva bajtů na výstupu ('a'
-> '61'
), takže byste si měli všimnout výrazného nárůstu paměti skriptu provádějícího dotaz – měl by využívat alespoň o tolik paměti více, jako je délka bajtů vkládaných binárních dat.
Dále to znamená, že spuštění bin2hex()
na dlouhém řetězci zabere hodně delší než spuštění mysql_real_escape string()
, což – jak je vysvětleno v dokumentaci MySQL - pouze escapuje 6 znaků:NULL
, \r
, \n
, \
, ,
a 'Control-Z'.
To bylo pro část PHP, nyní pro MySQL:Server musí provést opačnou operaci, aby data správně uložila. Vrácení jedné z funkcí trvá téměř stejně dlouho jako původní operace – zpětná funkce mysql_real_escape_string()
potřebuje nahradit uniklé hodnoty (\\
) s neescapovanými jedničkami (\
), zatímco opak bin2hex()
bude muset nahradit každý jeden byte n-tice s novým byte.
Od volání mysql_real_escape_string()
na binárních datech jsou bezpečná (podle dokumentace MySQL a dokumentace PHP nebo i když vezmeme v úvahu, že operace neprovádí žádné jiné konverze než ty, které jsou uvedeny výše), nemělo by absolutně žádný smysl provádět tak nákladnou operaci.