как предотвратить SQL-инъекцию из этого запроса?

Я использую 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'] . '%') ); 

Драйвер в настоящее время автоматически добавляет двоеточия, но это может не произойти в будущем, лучше всего совместить имя с заполнителем.