清理Symfony2中的SQL用户变量


Cleaning for SQL user vars in Symfony2

是否有一个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上是否有一个方法来清理这个变量,除了经典的php函数清理。

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

换句话说,从文档中,

$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

您至少应该在DBAL中使用参数(因为这是您正在使用的):

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

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