Pb : sprintf ds une requete d'insertion mssql_query()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pb : sprintf ds une requete d'insertion mssql_query()

par zeus » 28 mai 2007, 14:36

Effectivement :-k

J'ai tellement l'habitude d'entourer mes requêtes de " que j'ai même pas vérifié :?
Désolé :oops:

par risa83 » 28 mai 2007, 14:18

Merci pour tout.

Tout fonctionne correctement :D

par Shrell » 28 mai 2007, 14:11

Si tu as fait un copier/coller direct du code de zeus, il y a un probleme de guillemets (d'ailleurs la coloration syntaxique le montre), d'où l'erreur.
Correction :
$query =sprintf("insert into PACKREQUETE(ID_PACKPOSITIONNEMENT, ID_MOTEURDERECHERCHE, REQ_MOT,  REQ_RANG)  
              values (%d, %d, '%s', %d)",$ID_PACKPOSITIONNEMENT, $ID_MOTEURDERECHERCHE, $REQ_MOT, $REQ_RANG);
ou encore
$query =sprintf('insert into PACKREQUETE(ID_PACKPOSITIONNEMENT, ID_MOTEURDERECHERCHE, REQ_MOT,  REQ_RANG)  
              values (%d, %d, \'%s\', %d)',$ID_PACKPOSITIONNEMENT, $ID_MOTEURDERECHERCHE, $REQ_MOT, $REQ_RANG);

par risa83 » 28 mai 2007, 14:08

En l'encapsulant de cette manière, j'ai l'erreur suivante :

Code : Tout sélectionner

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING
La seule solution que j'ai trouvé pour pallier cette erreur est celle citée précédemment.

Solution que je trouve un peu 'lourde' ... :?

par zeus » 28 mai 2007, 14:02

En fait, c'est pas la variable qu'il faut encadrer. C'est la valeur dans la requête :
Il faut écrire

Code : Tout sélectionner

INSERT INTO maTable(monChamp) VALUES ('mavaleurtexte')
J'aurais donc plutôt écrit ta requête de cette manière :
$query =sprintf('insert into PACKREQUETE(ID_PACKPOSITIONNEMENT, ID_MOTEURDERECHERCHE, REQ_MOT,  REQ_RANG) 
              values (%d, %d, '%s', %d)',$ID_PACKPOSITIONNEMENT, $ID_MOTEURDERECHERCHE, $REQ_MOT, $REQ_RANG);
Le soucis ne vient pas de la variable mais de la requête ;)

par Invité » 28 mai 2007, 13:59

Bonjour,

Dans une requête, à partir du moment que tu utilises une chaine de caractère comme valeur, il faut l'encadrer de '.
Le %s me laisse penser que $REQ_MOT est une chaine de caractère, donc qu'il faut l'encadrer par des ' ;)

Merci pour ta reponse
En effet, en l'encadrant de la manière suivante, ma requete fonctionne :
 $query =sprintf('insert into PACKREQUETE(ID_PACKPOSITIONNEMENT, ID_MOTEURDERECHERCHE, REQ_MOT,  REQ_RANG) 
              values (%d, %d, %s, %d)',$ID_PACKPOSITIONNEMENT, $ID_MOTEURDERECHERCHE, '\''.$REQ_MOT.'\'', $REQ_RANG);
En revanche, je ne comprends pas pourquoi ma requete précédente est incorrect puisque $REQ_MOT est déclaré et initialisé en tant que chaine de caractère, de même type que le %s de sprintf() :shock:

par zeus » 28 mai 2007, 12:06

Bonjour,

Dans une requête, à partir du moment que tu utilises une chaine de caractère comme valeur, il faut l'encadrer de '.
Le %s me laisse penser que $REQ_MOT est une chaine de caractère, donc qu'il faut l'encadrer par des ' ;)

Pb : sprintf ds une requete d'insertion mssql_query()

par risa83 » 28 mai 2007, 11:44

Bonjour à tous et à toutes,

Je souhaiterais insérer des données dans une table
Pour cela j'utilise la fonction sprintf() qui me permet d'exécuter ma requete suivant des valeurs récupérées de diverses tables.

Tout fonctionne correctement lorsque j'insère un entier mais j'ai un problème lorsqu'il s'agit d'une chaine de caractère.
function insert_packRequete ($ID_PACKPOSITIONNEMENT, $ID_MOTEURDERECHERCHE, $REQ_MOT, $REQ_RANG){
  $query =sprintf('insert into PACKREQUETE(ID_PACKPOSITIONNEMENT, ID_MOTEURDERECHERCHE, REQ_MOT,  REQ_RANG) 
              values (%d, %d, %s, %d)',$ID_PACKPOSITIONNEMENT, $ID_MOTEURDERECHERCHE, $REQ_MOT, $REQ_RANG);
  $result = mssql_query($query) or die("Requete Sql non valide");
}
La valeur de $REQ_MOT provient d'une autre table et est définie en tant que varchar.
Voici l'erreur qui en découle :

Code : Tout sélectionner

Warning: mssql_query(): Sybase: Server message: The name 'chauffe' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted. (severity 15, procedure N/A) Requete Sql non valide
Tout aide sera la bienvenue :)

Merci