Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-08-2007 14:46:50

NerOcrO
Membre
Lieu: 77
Date d'inscription: 19-08-2007
Messages: 17

[Zend_Db_Query][1.0.1]Requête qui ne fonctionne pas

Salut,

Voici mon code :

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 :

Code:

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

 

#2 19-08-2007 17:54:00

B.Moncef
Nouveau membre
Lieu: Fes, Maroc
Date d'inscription: 17-08-2007
Messages: 5
Site web

Re: [Zend_Db_Query][1.0.1]Requête qui ne fonctionne pas

Code:

$result = $db->query('SELECT * FROM monstres WHERE sort = :sort', array('sort'=>'Aucun'));

Le probleme vient d'ici, c'est plutot

Code:

$result = $db->query('SELECT * FROM monstres WHERE sort = :sort', array(':sort'=>'Aucun'));

Hors ligne

 

#3 19-08-2007 18:16:28

NerOcrO
Membre
Lieu: 77
Date d'inscription: 19-08-2007
Messages: 17

Re: [Zend_Db_Query][1.0.1]Requête qui ne fonctionne pas

heu désolé mais ça ne fonctionne pas non plus sad

J'ai suivi ce cours pourtant :
http://julien-pauli.developpez.com/tuto … d-db#LIX-C

Hors ligne

 

#4 21-08-2007 10:56:46

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [Zend_Db_Query][1.0.1]Requête qui ne fonctionne pas

En effet, comme on vient de le voir ensemble sur msn, c'est très bizarre :-p

Hors ligne

 

#5 28-03-2008 10:55:01

Totos18
Nouveau membre
Date d'inscription: 28-03-2008
Messages: 1

Re: [Zend_Db_Query][1.0.1]Requête qui ne fonctionne pas

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, smile

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 ?? big_smile

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages