是否有Symfony2功能来清理用户输入?
到目前为止,这是我的代码;
$action_id = $this->getRequest( )->query->get('actionid');
$conn = $this->get('database_connection');
$query = $conn->fetchAll('SELECT * FROM api_codes WHERE `action_id` = "' . $action_id . '" LIMIT 1');
从表单获取action_id,以便用户输入。我想知道symfony2上是否有一个方法来清除除了用于清理的clasic php函数之外的var。
答案 0 :(得分:2)
我不认为Symfony在控制器级别提供任何特定的帮助器/方法来清理用户输入。但是,Doctrine附带sanitization用于数据库(SQL)注入。
换句话说,来自documentation,
$stmt = $conn->prepare('SELECT * FROM api_codes WHERE `action_id` = :action_id LIMIT 1');
$stmt->bindValue("action_id", $action_id); // Which would prevent SQL Injection
$stmt->fetchAll(); // Which could also be done in a one line refactoring
答案 1 :(得分:1)
您至少应该使用DBAL参数(因为这就是您所使用的):
$conn->fetchAll(
'SELECT * FROM api_codes WHERE `action_id` = :id LIMIT 1',
array("id"=>$action_id)
);
或您的代码打开SQL注入。
答案 2 :(得分:0)
如果您谈论SQL转义,您可以在当前示例中使用$conn->quote($input);
。您也可以使用像Ahmed建议的准备好的陈述。