Это кажется общеизвестным для использования mysql_set_charset
/mysqli::set_charset
вместо прямого запроса MySQL set names
.
Часто упоминаемая причина заключается в том, что set names
небезопасен, потому что кодировка, используемая для mysql_real_escape_string
/mysqli::real_escape_string
будет задан только вызовом mysql_set_charset
/mysqli::set_charset
. (Другая причина, о которой идет речь, заключается в том, что в документах PHP говорится, что "не рекомендуется" & sect;.)
Однако безопасно ли использовать прямой запрос MySQL set names
, если мы будем использовать подготовленные заявления и другие способы ускорения, кроме mysql_real_escape_string
/mysqli::real_escape_string
/mysqli_escape_string
?
Помимо влияния на кодировку mysql_real_escape_string
/mysqli::real_escape_string
/mysqli_escape_string
, существует ли разница между set names
vs mysql_set_charset
/mysqli::set_charset
?