Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Pour la connexion des utilisateurs j'effectue le code suivant :
<?php $oDbAdapter = Zend_Db_Table::getDefaultAdapter(); $oAuthAdapter = new Zend_Auth_Adapter_DbTable($oDbAdapter); //On indique que la table des comptes utilisateurs est 'utilisateur' //puis on indique les colonnes à utiliser pour l'identifiant et le mot de passe $oAuthAdapter->setTableName('USER') ->setIdentityColumn('USER_LOGIN') ->setCredentialColumn('USER_PASSWORD'); //On affect notre variables postées à tester $oAuthAdapter->setIdentity($this->_getParam('user_login')) ->setCredential(md5($this->_getParam('user_password'))); //On essaie de ce connecter $oAuth = Zend_Auth::getInstance(); $oLoginResult = $oAuth->authenticate($oAuthAdapter); if($oLoginResult->isValid()){ $aUserDatas = $oAuthAdapter->getResultRowObject(); ... ?>
Le problème est que getResultRowObject transforme les valeurs int de la table USER en string.
Je ne voit pas comment respecter les types avec cette méthode...
Merci d'avance pour vos réponses.
Dernière modification par neilime (09-11-2010 13:36:40)
Hors ligne
Il n'y a pas vraiment de types en PHP, donc je vois mal comment ça pourrait être géré comme il le faut.
Hors ligne
Il n'y a pas vraiment de types en PHP, donc je vois mal comment ça pourrait être géré comme il le faut.
Ah bon ???
Voilà pour mon cas :
Structure SQL :
CREATE TABLE IF NOT EXISTS `USER` (
`USER_ID` int(11) NOT NULL auto_increment,
`USER_LOGIN` varchar(250) NOT NULL,
`USER_PASSWORD` varchar(250) NOT NULL,
`USER_EMAIL` mediumtext NOT NULL,
`USER_DATE` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`USER_UPDATE` timestamp NOT NULL default '0000-00-00 00:00:00',
`USER_LAST_VISITE_DATE` timestamp NOT NULL default '0000-00-00 00:00:00',
`USER_SUBSCRIPTION_KEY` varchar(250) default NULL,
`USER_CONFIGURATION_ID` int(11) NOT NULL,
`USER_RIGHT_ID` int(11) NOT NULL,
`USER_STATUS_ID` int(11) NOT NULL,
PRIMARY KEY (`USER_ID`),
KEY `FK_REFERENCE_23` (`USER_STATUS_ID`),
KEY `FK_REFERENCE_24` (`USER_CONFIGURATION_ID`),
KEY `FK_REFERENCE_RIGHT` (`USER_RIGHT_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
USER_RIGHT_ID est bien de type int
Mais si je fait cela :
gettype($aUserDatas->USER_RIGHT_ID); cela me retourne string
et donc si je fait $aUserDatas->USER_RIGHT_ID === 3 (en supposant que la valeur dans la table est égale à 3)
Cela me retournera forcément false.
Cela veux dire que les valeurs résultant de la table ne sont pas casté en fonction du type SQL
Hors ligne
USER_RIGHT_ID est de type int dans ta base de données...
Tu peux faire ($aUserDatas->USER_RIGHT_ID == 3), sinon tu peux t'amuser à faire ((int)$aUserDatas->USER_RIGHT_ID === 3), mais j'ai du mal à voir l’intérêt.
Hors ligne
Je veux simplement respecter les types entre base de donnée et php. (pas seulement que pour les int d'ailleurs).
Pour un souci de performance et de conformité
Hors ligne
Manipulation des types
J'espère que ça pourra t'aider.
Hors ligne
Bon j'ai réussi à voir d'où venait le problème...
En fait c'est l'adapter pdo_mysql qui transforme les valeurs en String...
En revanche avec l'adapter mysqli je ne rencontre pas ce problème.
Donc il faut que je trouve un moyen de paramétrer le comportement de pdo_mysql.
Hors ligne
Pages: 1