2012-02-14 3 views
1

Я пытаюсь сопоставить md5 (ID) с идентификатором.Propel ORM - Пользовательский, где статья

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

Любые идеи?

ответ

1

После lenghty 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 [ «фс»] было имя таблицы, а не значением. \ "" решена проблема.

+0

Почему бы просто не локализовать значение хэша в новый var, а затем передать его объекту критериев? Локализовать: '$ userPassword = md5 ($ _ REQUEST ['fs']);' затем перейти к объекту критериев: $ c-> add (UserPeer :: USER_PASSWORD, $ userPassword, Criteria :: EQUALS); Кстати, вам не нужно беспокоиться о SQL-инъекции, если вы сделаете это так, потому что будет передана хэш-строка, а не фактическое значение хэширования. –

+0

Поскольку пароль - это чистый текст, и я хочу использовать поле MD5 (пароль) для сравнения. Это просто пример того, что я не храню пароли в текстовом виде. – Luke

+0

Согласованные, простые текстовые пароли - плохая идея. Но вы можете хэш перед отправкой запроса, чтобы сравнить с хешем, который у вас есть в базе данных. –

3

Прежде всего, непосредственно с использованием объектов критериев устарел не рекомендуется. Вы должны использовать Active Query classes.

Используя эти классы, вы будете иметь возможность писать такие вещи, как это:

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

Вы заметите, что я использую PhpName как таблицы и столбца в запросе.

EDIT: для сырых условий необходимо указать тип параметра. Более подробную информацию вы найдете на странице this issue.

+0

Необязательное исключение 'PropelException' с сообщением 'Невозможно определить столбец для привязки к параметру в разделе' md5 (User.PASSWORD) =? '' – Luke

+1

Объекты критериев устарели? Думаю, мне нужно, чтобы люди на работе знали ... –

+1

Это не рекомендуется, а не устарело. –