Я использую Yii 1, я хочу построить следующий запрос:
$a = Model::model()->findAllBySql( 'SELECT * FROM table WHERE name like "%'.$_GET['name'].'%"' );
Чтобы предотвратить внедрение sql, я написал следующее:
$a = Model::model()->findAllBySql( 'SELECT * FROM table WHERE name like "%:name%"', array("name"=>$_GET['name']) );
но он не возвратил данных. Есть ли ошибки в этом запросе?
Когда заполнитель цитируется, он не является заполнителем, это буквальное значение. Попробуйте это так:
$a = Model::model()->findAllBySql( 'SELECT * FROM table WHERE name like :name', array(":name"=> '%' . $_GET['name'] . '%') );
Драйвер в настоящее время автоматически добавляет двоеточия, но это может не произойти в будущем, лучше всего совместить имя с заполнителем.