Использование полей URL в доктрине - PullRequest
0 голосов
/ 24 июня 2010

Я строю сайт и планирую внедрить 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 #)Библиотека / 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 / Библиотека/WebServer/Documents/ResearchPM/lib/Doctrine/Query/Where.php(121): Doctrine_Query-> parseClause ('https://www.goo...') # 6 /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Query/Where.php(81): Doctrine_Query_Where -> _ buildSql ('openid_url', '=', 'https://www.goo.. в / Library /WebServer / Documents / ResearchPM / lib / Doctrine / Table.php в строке 299

1 Ответ

4 голосов
/ 24 июня 2010

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

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

Или

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...