Luke
Luke

Reputation: 1870

Propel ORM - Custom where clause

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?

Upvotes: 1

Views: 3768

Answers (2)

Luke
Luke

Reputation: 1870

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.

Upvotes: 1

K-Phoen
K-Phoen

Reputation: 1270

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.

Upvotes: 3

Related Questions