2013-04-24 31 views
1

是否有一个用于清理用户输入的Symfony2函数?清理Symfony2中的SQL用户变量

这是我的代码,

$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上的方法来清理除var关键的php函数之外的清理。

回答

2

我不认为Symfony在控制器级别提供了任何特定的帮助器/方法来清理用户输入。但是,对于数据库(SQL)注入,Doctrine附带sanitization

换句话说,从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 
0

如果你谈论的SQL转义您可以在当前的例子使用$conn->quote($input);。您也可以使用像Ahmed建议的准备好的语句。

1

你至少应该使用的参数与DBAL(因为这是你使用的是什么):

$conn->fetchAll(
    'SELECT * FROM api_codes WHERE `action_id` = :id LIMIT 1', 
    array("id"=>$action_id) 
); 

或代码打开SQL注入。