Według Stefana Essera, "mysql_real_escape_string()
[jest] nie jest bezpieczny, gdy SET NAMES
jest używany."
Jego wyjaśnienie, z jego bloga :
SET NAMES jest zwykle używany do przełączania kodowania z domyślnego na wymagane przez aplikację. Odbywa się to w sposób, który mysql_real_escape_string
nie wie o tym. Oznacza to, że jeśli przełączysz się na kodowanie wielobajtowe, które pozwala na odwrotny ukośnik jako 2. 3. 4.… bajt, wpadniesz w kłopoty, ponieważ mysql_real_escape_string
nie ucieka poprawnie. UTF-8 jest bezpieczny…
Bezpiecznym sposobem na zmianę kodowania jest mysql_set_charset
, ale jest to dostępne tylko w nowych wersjach PHP
Wspomina jednak, że UTF-8 jest bezpieczny.