Мне интересно, могу ли я избежать строк (используя real_escape_string) без предварительного создания экземпляра объекта для применения функции?
т.е. мы можем это сделать:
$database = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME); $database->real_escape_string($query); $database->query($query)
и т.п.
Однако то, что я пытаюсь сделать для согласованности в моем приложении, состоит в том, чтобы иметь в основном статический класс базы данных, который является расширением класса MySQLi, так что я мог бы вызвать: database::real_escape_string($query)
, статический метод ,
Я действительно понимаю, что я мог бы построить функцию, которая ускользает от строки вручную без MySQL.
Короткий ответ – нет.
Долгий ответ: Ну, это не рекомендуется по простой причине – реальный побег MySQLi учитывает кодировку символов, так как определенный тип методов SQL-инъекций использует и злоупотребляет кодировкой символов для обхода общих фильтров. Это требует, чтобы код знал как кодировку исходного кода (PHP), так и конфигурацию charset получателя (MySQL). Вот почему его нельзя назвать статически (и его нельзя вызвать до тех пор, пока у вас не будет действующей ссылки на сервер)!
Я бы также избежал процедурной версии этого, так как он просто «кодирует» бит под капотом, эффективно беря последний сервер, к которому вы подключились, что может привести к забавному материалу, когда вы имеете дело с несколькими базами данных соединения одновременно.
mysql_real_escape_string () может вам помочь, но вы должны установить соединение в обеих версиях. причина этого в том, что приложение не знает, как избежать строк для базы данных. при подключении к базе данных функция запрашивает базу данных о том, как убежать и что сбежать.