Intereting Posts
Возможные ошибки PDOException (MySQL 5)? оператор mysqli не отображает ничего для результата facebook chat api – php TypeError: oColumn не определено При использовании библиотеки JQuery Datatables Функция PHP для удаления всех между определенным символом (-ами) в строке Пользовательская проверка в PHP Codeigniter – требуется одно из двух полей Угловая – $ http.delete возвращает успех, но не работает RabbitMQ вызывает функцию обратного вызова для потребителя, когда у него есть какое-то сообщение? PhantomJS – «небезопасно-eval» не является разрешенным источником сценария в следующей директиве политики безопасности контента Как скопировать файлы CSS и JS в папку поставщика композитора? Генератор ключей PHP API Клиент Java Webservice UsernameToken эквивалентен PHP Как использовать активную загрузку здесь, я имею в виду только одну переменную вместо двух. Поэтому мне не нужно запускать два отдельных запроса Переменная, не проходящая / обновляемая в петле PHP Silverstripe – Зацикливание по неассоциативному массиву в шаблоне

Как использовать mysql_escape_string () в структуре Yii?

Как мы все знаем, мы не можем использовать необработанные запросы MySQL в таких рамках, как Yii. Я хочу использовать mysql_escape_string в моем проекте, который работает в системе Yii, чтобы уйти от SQL-инъекции во вход пользователя.

Я знаю, что mysql_escape_string устарел в PHP 5.5 и что у меня есть альтернатива PDO. Какова альтернатива в структуре Yii, а также способ PDO для mysql_escape_string ()?

Альтернативой mysql_escape_string в PDO является использование подготовленных операторов. Например, в Yii:

 $user = Yii::app()->db->createCommand() ->select('username, password') ->from('tbl_user') ->where('id=:id', array(':id'=>$_GET['userId'])) ->queryRow(); 

(Из справочной документации Yii http://www.yiiframework.com/doc/api/1.1/CDbCommand )

Вы защищены от SQL-инъекции, когда передаете параметры через заполнители в подготовленном сообщении.

Использовать CHTMlPurifier:

 // Example $p = new CHtmlPurifier(); $user = Yii::app()->db->createCommand() ->select('username, password') ->from('tbl_user') ->where('id=:id', array(':id'=>$p->purify($_GET['userId']);)) ->queryRow(); 

В параметрах get можно добавить вредоносный код.

Экранирование параметров запроса с помощью подготовленных запросов?? у заполнителей есть свои недостатки (экранированный параметр удаляется из тела запроса, что затрудняет работу с некоторыми запросами, возможно, в базу данных может быть добавлен дополнительный обратный маршрут, который не всегда оправдан; если запрос по существу динамический, тогда подготовка многих из них может привести к серверным ресурсам).

Yii имеет метод quoteValue, который может использоваться для исключения параметров запроса вне формы запроса.

Вам не нужно избегать параметров при использовании ActiveRecords .

Однако, если вы хотите использовать эту функцию mysql_escape_string вы можете попробовать с помощью mysqli_escape_string()

Я использовал это с Yii при выполнении запросов с высокой степенью сложности, которые имели бы проблемы с производительностью при работе с моделями, и мне нужно было выполнить SQL-запросы непосредственно в БД.

Для этого вы можете использовать Yii::app()->db->createCommand($sql)->queryAll() (или любую другую аналогичную функцию).