Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Salut,
Voici mon code :
set_include_path('librairie/zendframework/library/'.get_include_path()); require 'librairie/zendframework/library/Zend/Db.php'; $params = array ('host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'delain'); // Test de la connexion try { $db = Zend_Db::factory('MySQLi', $params); $db->getConnection(); } catch(Zend_Db_Adapter_Exception $e){ echo $e->getMessage(); } // Requête //$result = $db->query('SELECT * FROM monstres'); $result = $db->query('SELECT * FROM monstres WHERE sort = :sort', array('sort'=>'Aucun')); // Résultat de la requête $rows = $result->fetchAll(); echo "<pre>"; print_r($rows); echo "</pre>";
Ma seconde requête me retourne une erreur :
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'Invalid bind-variable position ':sort'' in C:\Program Files\Zend\Apache2\htdocs\librairie\zendframework\library\Zend\Db\Statement.php:144 Stack trace: #0 C:\Program Files\Zend\Apache2\htdocs\librairie\zendframework\library\Zend\Db\Statement.php(108): Zend_Db_Statement->_parseParameters('SELECT * FROM m...') #1 C:\Program Files\Zend\Apache2\htdocs\librairie\zendframework\library\Zend\Db\Adapter\Mysqli.php(284): Zend_Db_Statement->__construct(Object(Zend_Db_Adapter_Mysqli), 'SELECT * FROM m...') #2 C:\Program Files\Zend\Apache2\htdocs\librairie\zendframework\library\Zend\Db\Adapter\Abstract.php(261): Zend_Db_Adapter_Mysqli->prepare('SELECT * FROM m...') #3 C:\Program Files\Zend\Apache2\htdocs\zend.php(23): Zend_Db_Adapter_Abstract->query('SELECT * FROM m...', Array) #4 {main} thrown in C:\Program Files\Zend\Apache2\htdocs\librairie\zendframework\library\Zend\Db\Statement.php on line 144
Et je ne vois pas pourquoi alors que ça me parait bon ???
Merci.
Hors ligne
$result = $db->query('SELECT * FROM monstres WHERE sort = :sort', array('sort'=>'Aucun'));
Le probleme vient d'ici, c'est plutot
$result = $db->query('SELECT * FROM monstres WHERE sort = :sort', array(':sort'=>'Aucun'));
Hors ligne
heu désolé mais ça ne fonctionne pas non plus
J'ai suivi ce cours pourtant :
http://julien-pauli.developpez.com/tuto … d-db#LIX-C
Hors ligne
En effet, comme on vient de le voir ensemble sur msn, c'est très bizarre :-p
Hors ligne
Bonjour,
ma réponse vient très tard mais vue que je suis tombé sur le topic et que je n'ai pas eu la réponse, j'ai du chercher...
en faite, l'erreur vient de Mysqli qui ne gère pas le typage par nom, mais uniquement le typage par positionnement.
Je m'explique,
SELECT * FROM XX WHERE __id = ?
ceci est un "typage" (je ne sais pas comment appeler sa autrement) de positionnement
et
SELECT * FROM XX WHERE __id = :id
ceci est un typage par nom
les :name permet à PDO (un autre adapter de Zend) de modifier le typage par la valeur de même nom mais Mysqli ne gère que la première méthode qui consiste à remplacer en fonction de la position ; le premier ? est remplacé par la première valeur, le second ? est remplacé par la seconde valeur... etc...
Solutions:
#1 Utiliser uniquement les requête par positionnement
#2 Utiliser l'adapter PDO (qui existe pour beaucoup de base de données) => PDO_MYSQL, PDO_SQLITE, PDO_PGSQL...
j'espère que cela servira à tous ceux qui se demande encore pourquoi ??
Et peut être même pour toi NerOcrO (j'ai vérifié avec la version 1.0.3 et 1.5.1 de Zend et Mysqli n'as pas changé)
Cordialement (Et désolé pour l'orthographe)
Dernière modification par Totos18 (28-03-2008 11:04:26)
Hors ligne
Pages: 1