2010-06-23 4 views
0

Je construis le site et planifie l'implémentation d'OpenID. Je peux récupérer une URL OpenID de Google, mais Doctrine semble faire des choses amusantes avec des URL dans la clause where de ma requête. Comment puis-je résoudre ce problème?Utilisation des champs d'URL dans la doctrine

Voici la fonction

/* 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(); 
} 

Voici l'erreur de la page

Fatal error: Uncaught exception 'Doctrine_Exception' with message 'Couldn't find class www' in /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Table.php:299 Stack trace: #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/Doctrine/Query/Where.php(81): Doctrine_Query_Where->_buildSql('openid_url', '=', ' https://www.goo .. in /Library/WebServer/Documents/ResearchPM/lib/Doctrine/Table.php on line 299

Répondre

4

vous n'êtes pas échapper les variables appropiately. Il y a deux méthodes, par des jokers nommés ou de position:

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

Ou

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

Ce échappe correctement les variables que vous insérez, et rend votre application la protection contre sql-injection

Questions connexes