Использование полей URL в Doctrine

Я создаю сайт и планирую внедрить OpenID. Я могу получить URL-адрес OpenID от Google, но Doctrine, похоже, делает забавные вещи с URL-адресами в предложении where моего запроса. Как я могу это исправить?

Вот функция

/* This function queries docrtrine for a user OpenID URL
 * and returns the user object.
 */
function getUserByUserOpenIDURL ($userOpenIDURL) {
  $q = Doctrine_Query::create()
     ->select('*')
     ->from('jsgUserOpenID as u')
     ->where('openid_url = ' . $userOpenIDURL);

  return $q->fetchOne();
}

Вот ошибка со страницы

Неустранимая ошибка: неперехваченное исключение «Doctrine_Exception» с сообщением «Не удалось найти класс www» в /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Table.php:299 Трассировка стека: # 0 / Library / WebServer / Documents / ResearchPM /lib/Doctrine/Table.php(256): Doctrine_Table-> initDefinition () # 1 /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Connection.php(1126): Doctrine_Table -> __ construct ('www', Object (Doctrine_Connection_Mysql), true) # 2 /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Query.php(1934): Doctrine_Connection-> getTable ('www') # 3 / Library / WebServer / Documents / ResearchPM / lib / Doctrine / Query.php (1732): Doctrine_Query-> loadRoot ('www', 'www') # 4 /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Query.php(713): Doctrine_Query-> load (' www.google ') # 5 /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Query/Where.php(121): Doctrine_Query-> parseClause (' https://www.goo ... ') # 6 / Library / WebServer / Documents / ResearchPM / lib / Doctri ne / Query / Where.php (81): Doctrine_Query_Where -> _ buildSql ('openid_url', '=', 'https://www.goo .. в /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Table.php в строке 299


person Justin Giboney    schedule 23.06.2010    source источник


Ответы (1)


Вы не избегаете переменных должным образом. Существует два метода с использованием именованных или позиционных подстановочных знаков:

$q = Doctrine_Query::create()
       ->select('*')
       ->from('jsgUserOpenID as u')
       ->where('openid_url = ?', $userOpenIDURL);

Or

$q = Doctrine_Query::create() 
       ->select('*') 
       ->from('jsgUserOpenID as u') 
       ->where('openid_url = :url', array("url" => $userOpenIDURL));

Это правильно экранирует вводимые вами переменные и защищает ваше приложение от sql-инъекций.

person mhughes    schedule 23.06.2010