Почему для escape-значений SQL требуется открытое соединение?

Просто для ясности, может ли кто-нибудь объяснить, почему mysqli_real_escape_string должен читать:

$query = mysqli_real_escape_string($conn,"SELECT * FROM tbl");

И не только:

$query = mysqli_real_escape_string("SELECT * FROM tbl");

Спасибо за любую помощь!

Ответ 1

Из-за кодировки кодировки.

Без $conn, mysqli_real_escape_string() не сможет определить, какой символ кодирует соединение, и слепо попытается избежать общих опасных символов - оставив некоторые потенциально опасные хакерские хаки для прохождения.

Истинные (не эмулированные) подготовленные операторы еще лучше (или более безопасны, как вы предпочитаете), поскольку они принимают кодировку символов столбца вместо подключения.