Symfony 1.4 Propel:在自定义SQL查询中转义值?

时间:2014-07-30 15:57:40

标签: mysql symfony escaping symfony-1.4 propel

我有几个带用户输入的自定义SQL查询,例如人物搜索。我知道addslashes()不可靠,但我不能使用mysqli_real_escape_string()或PDO语句与Propel,我可以吗?

对等方法示例:

$criteria = new Criteria();
$criteria->addAsColumn("lastnameRelevance", "CASE WHEN ".self::LAST_NAME." LIKE '".addslashes($query)."%' THEN 1 ELSE 0 END");
$criterion = $criteria->getNewCriterion(self::NAME_NORMALIZED, "%".$query."%", Criteria::LIKE);
$criteria->add($criterion);
$criteria->addDescendingOrderByColumn("lastnameRelevance");
$criteria->addAscendingOrderByColumn(self::NAME_NORMALIZED);
return self::doSelectJoinAll($criteria);

如果我没有将addslashes()添加到$ query,那么很容易进行SQL注入。 但对于mysqli_real_escape_string(),我需要一个$ link,我没有?

1 个答案:

答案 0 :(得分:1)

Halleluja,我想我找到了解决方案:

Propel::getConnection()->quote($userInput)

这就是魔术。一步引用和逃避! 所以自定义查询将是:

$criteria->addAsColumn("lastnameRelevance", "CASE WHEN ".self::LAST_NAME." LIKE ".Propel::getConnection()->quote($query."%")." THEN 1 ELSE 0 END");

有人可以验证,这是确保输入安全的最佳方法吗?