Page 1 sur 1

Ne pas prendre en compte et conserver les caractères '?' ave

Posté : 07 juil. 2008, 09:02
par Baptiste
Bonjour,

Je viens de me rendre compte que lorsqu'il y a un ? dans ma requete, odbc me renvoi l'erreur suivante :

odbc_exec() [function.odbc-exec]: SQL error: Parameter ':Param1' not found

Voici une requete type :

Code : Tout sélectionner

$var = "voici un exemple avec un ? et puis voilà !"; $req = "update table set champ='".$var."' where champ2=".$var; odbc_exec($lien_odbc,$req);
Je cherche le moyen de dire à la fonction de ne pas prendre en compte le ?.
J'ai essayé :
  • \
  • " ou '
  • {} : cela fonctionne mais supprime les ?
Peut être est il possible de corriger le souci avec odbc_setoption ?

D'avance merci

Posté : 07 juil. 2008, 09:12
par Sékiltoyai
Utiliser les requètes préparées que je pense te fournit odbc…

Posté : 07 juil. 2008, 09:32
par Baptiste
Tu veux dire :

odbc_prepare puis un odbc_excecute

Code : Tout sélectionner

$query = odbc_prepare($lien_odbc_itelcom, $req); $result = odbc_execute($query,$param);
Dans cet exemple param est un tableau composé de "?"

Mais cela ne fonctionne pas aussi, j'ai une autre erreur :

SQL error: The query returned an error (ODBC State: HY000) Error: NexusDB: <unnamed TnxODBCQuery instance>: Unexpected exception object raised: [Exception] Error: Attempt to set parameter on non-parameterized query

et la requete apparait avec à la place des ? des :param

Posté : 07 juil. 2008, 09:47
par Sékiltoyai
Je voulais simplement dire que odbc va vouloir remplacer tous les points d'interrogation de la requète par des paramètres. Si les requètes préparées existe, ce n'est pas pour faire joli, c'est que tu n'es pas sensé passer des données directement dans ta requète mais les passer en paramètre. Ta manière d'utiliser odbc est un détournement, il est donc parfaitement logique que tu aies des problèmes de ce genre.
Je te suggère donc de vraiment utiliser les requètes préparées comme il se doit, pas d'utiliser des subterfuges pour essayer de le bluffer, la sécurité en sera par ailleurs d'autant plus améliorée...

Posté : 07 juil. 2008, 10:38
par Baptiste
Si je comprend bien pour être propre je dois fonctionner ainsi :

Code : Tout sélectionner

$var = "voici un exemple avec un ? et puis voilà !"; $req = "update table set champ=? where cledossier=?"; $query = odbc_prepare($lien_odbc_itelcom, $req); $result = odbc_execute($query,array($var,1));

Posté : 07 juil. 2008, 12:02
par momox
Ne faut il pas quoter les valeurs des champs ? Simple question...

Posté : 07 juil. 2008, 12:48
par Sékiltoyai
@Baptiste : Tu as tout compris :)
@momox : Non, justement la préparation de la requète est chargée de s'en occuper

Posté : 07 juil. 2008, 14:07
par Baptiste
Merci à toi Sékiltoyai tout fonctionne parfaitement.

Je vais corriger mes scripts.

Posté : 07 juil. 2008, 14:18
par Vurtu
Merci de marquer le sujet comme résolu si tout est bon :)

Posté : 07 juil. 2008, 15:44
par zeus
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)


Vurtu, Baptiste n'étant pas inscrit, il ne peut le faire lui même. Il vaut donc mieux laisser les modérateurs s'occuper de ce genre de remarques ;)
Mais merci de ton implication :pouce: