|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-08-18 18:18 UTC] angelo dot courtel at laposte dot net
Description:
------------
Hi
when I execute a prepared query which use twice, or more, a same parameters, it
returns an error : in french : ERREUR: n'a pas pu déterminer le type de données
du paramètres $3
ie. : this query don't works
$sReq = 'select *
from categorie
left join budget on bud_cat = cat_cod and bud_moi = :month and bud_ann =
:year
left join operation on ope_cat = cat_cod and ope_moi = :month and
ope_ann = :year
where cat_cod = :categorie';
$rCategorie = $oAppli->getDb()->prepare($sReq);
$rCategorie->bindParam(':month', date('m'));
$rCategorie->bindParam(':categorie', $sCategorie);
$rCategorie->bindParam(':year', date('Y'));
if ($rCategorie->execute())
but if I add "-- :year :categorie :month" at the beginning of the query, it
works !!!
I thinks PDO don't like seeing a repeated parameter before seens all the
parameters (the :month appears twice before :categorie, almost with the comment
at the beginning, PDO see all parameters at start)
Sorry for my english I'm french guy.
Thks
Test script:
---------------
//don't work
$sReq = 'select *
from categorie
left join budget on bud_cat = cat_cod and bud_moi = :month and bud_ann = :year
left join operation on ope_cat = cat_cod and ope_moi = :month and ope_ann = :year
where cat_cod = :categorie';
$rCategorie = $oAppli->getDb()->prepare($sReq);
$rCategorie->bindParam(':month', date('m'));
$rCategorie->bindParam(':categorie', $sCategorie);
$rCategorie->bindParam(':year', date('Y'));
if ($rCategorie->execute())
//works fine
$sReq = '-- :year :categorie :month
select *
from categorie
left join budget on bud_cat = cat_cod and bud_moi = :month and bud_ann = :year
left join operation on ope_cat = cat_cod and ope_moi = :month and ope_ann = :year
where cat_cod = :categorie';
$rCategorie = $oAppli->getDb()->prepare($sReq);
$rCategorie->bindParam(':month', date('m'));
$rCategorie->bindParam(':categorie', $sCategorie);
$rCategorie->bindParam(':year', date('Y'));
if ($rCategorie->execute())
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Dec 02 13:00:01 2025 UTC |
A little example for explain my bug : This source works correctly on an Windows WAMP PHP5.2.6 But not on Debian :( <?php //running on PHP Version 5.2.6-1+lenny6 try { $dbh = new PDO('pgsql:host=localhost;port=5432;dbname=db;user=user;password=pass'); } catch (PDOException $e) { echo 'Connexion failed : ' . $e->getMessage();exit; } //list or parameters $id = 40; $id2 = 40; $param = array (':id' => $id, ':id2' => $id2); //query failed $sReq = ' select * from t1 left join t2 on t2.id = :id left join t3 on t3.id = :id where t1.id = :id2'; $rTest1 = $dbh->prepare($sReq); if ($rTest1->execute($param)) echo 'OK'; else var_dump($rTest1->errorInfo()); // --> array(3) { [0]=> string(5) "42P18" [1]=> int(7) [2]=> string(69) "ERREUR: n'a pas pu déterminer le type de données du paramètres $2" } $rTest2 = $dbh->prepare($sReq); $rTest2->bindParam(':id', $id); $rTest2->bindParam(':id2', $id2); if ($rTest2->execute()) echo 'OK'; else var_dump($rTest2->errorInfo()); // --> array(3) { [0]=> string(5) "42P18" [1]=> int(7) [2]=> string(69) "ERREUR: n'a pas pu déterminer le type de données du paramètres $2" } //query success $sReq = ' -- :id :id2 select * from t1 left join t2 on t2.id = :id left join t3 on t3.id = :id where t1.id = :id2'; $rTest3 = $dbh->prepare($sReq); if ($rTest3->execute($param)) echo 'OK'; else var_dump($rTest3->errorInfo()); // --> OK $rTest4 = $dbh->prepare($sReq); $rTest4->bindParam(':id', $id); $rTest4->bindParam(':id2', $id2); if ($rTest4->execute()) echo 'OK'; else var_dump($rTest4->errorInfo()); // --> OK ?>