Propel ORM - 自定义 where 子句

发布于 2025-01-05 23:10:55 字数 395 浏览 0 评论 0原文

我正在尝试将 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);

有什么想法吗?

I'm trying to match md5(ID) to an id.

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

this is ID = 58

I tried something like this. I know I'm close I just don't know what I'm missing

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

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尽揽少女心 2025-01-12 23:10:55

首先,不推荐直接使用 Criteria 对象,不推荐。您应该使用活动查询类

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

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

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

编辑:对于原始条件,必须指定参数类型。您将找到有关此问题的更多信息。

First of all, directly using Criteria objects is deprecated not recommended. You should use Active Query classes.

Using these classes, you will be able to write stuff like this :

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

You'll notice that I use the PhpName both of the table and the column in the query.

EDIT : For raw conditions, the parameter type has to be specified. You'll find more information on this issue.

能否归途做我良人 2025-01-12 23:10:55

经过漫长的 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'] 是表的名称而不是值。 \"" 解决了问题。

After lenghty T&E process I managed to get it done like this

$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);

For some reason PropelORM though that $_REQUEST['fs'] was name of the table rather than the value. \"" solved the problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文