推动ORM - 自定义where子句

时间:2012-02-14 09:16:18

标签: mysql propel

我正在尝试将md5(ID)与id匹配。

SELECT *
FROM `user` u
WHERE
MD5(`user_id`) = '66f041e16a60928b05a7e228a89c3799'

这是ID = 58

我试过这样的事情。我知道我很接近我只是不知道我错过了什么

$criteria = new Criteria();
$criteria->addAnd('md5('.User::USER_ID.')', $_REQUEST['fs'], Criteria::CUSTOM);
$user = UserPeer::doSelectOne($criteria);

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

首先,不建议直接使用Criteria对象不赞成。您应该使用Active Query classes

使用这些类,您将能够编写如下内容:

UserQuery::create()
  ->where('md5(User.Password) = ?', $_REQUEST['fs'], PDO::PARAM_STR)                                                
  ->findOne();

您会注意到我在查询中使用了表和列的PhpName。

编辑:对于原始条件,必须指定参数类型。您可以在this issue找到更多信息。

答案 1 :(得分:1)

经过长时间的T& E流程后,我设法完成了这样的工作

$c = new Criteria();
$c->add(UserPeer::USER_ID, "md5(user.user_id) = \"".$_REQUEST['fs']."\"", Criteria::CUSTOM); // risk of SQL injection!!
$saved_search = UserPeer::doSelectOne($c);

由于某种原因,PropelORM虽然$ _REQUEST ['fs']是表的名称而不是值。 \“”解决了这个问题。