Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 21/10/2013 13:09:58
- gege2b
- Membre
Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
Bonjour à tous,
je suis nouveau sur ce forum (et de manière générale sur pgsql)
J'ai un soucis (en fait, plusieurs, mais j'ai réussi a régler les précédents semble t-il), explications :
Je fais remplir un formulaire sur un page web, jusque là rien d'anormal. J'envoie le contenu de ce formulaire par un jQuery : $.post('inc/ajax.php', $('#adduserform').serialize()
Mon php reçois bien tout et fait ce qu'il a à faire
Parmi les champs du formulaire, il y a un champ "Pays" dont le contenu est par défaut "France", une chaîne donc, c'est sûr.
Dans ma table, c'est aussi une chaine (un varchar(64))
Or, quand je fait ma requête pgsql (en utilisant PDO) j'ai l'erreur " " syntaxe en entrée invalide pour l'entier : «France»", ce que je trouve incohérent car je ne comprends pas pourquoi il s'évertue à considérer ce champ comme un entier alors qu'il s'agit d'un texte.
A titre d'information, voici ce que je fais dans le PHP qui génère la requete :
$req = $this->db->prepare($sql);
foreach($this->userdatas as $key => $value)
{
switch (gettype($value)) {
case 'string': $req->bindValue(":$key", "$value", PDO::PARAM_STR); break;
case 'boolean': $req->bindValue(":$key", $value, PDO::PARAM_BOOL); break;
case 'integer': $req->bindValue(":$key", $value, PDO::PARAM_INT); break;
case 'NULL': $req->bindValue(":$key", $value, PDO::PARAM_NULL); break;
default: $req->bindValue(":$key", "$value", PDO::PARAM_STR); break;
}
}
if ($req->execute()) { ............. }
Je ne suis pas certain que la méthode soit la bonne, mais a priori elle est censée faire ce qui est nécessaire (userdatas est un tableau qui contient donc les 30 parametres de la requete)
S'il vous faut d'autres infos, n'hésitez pas à me demander... merci bien
gege
Dernière modification par gege2b (21/10/2013 13:10:42)
Hors ligne
#2 23/10/2013 00:02:57
- gleu
- Administrateur
Re : Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
Quelle est la requête exécutée par PostgreSQL ?
Guillaume.
Hors ligne
#3 24/10/2013 11:35:57
- gege2b
- Membre
Re : Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
évidemment j'ai oublié l'élément le plus important
voici le log d'erreur de pgsql, avec la requete dedans
2013-10-24 11:34:47 CEST ERREUR: syntaxe en entrée invalide pour l'entier : « France »
2013-10-24 11:34:47 CEST INSTRUCTION : INSERT INTO testusagers (
profile, nom, prenom, statut, archive, login, passw, civilite, csp, formation, organisme, adresse1, adresse2, CP, ville, commune_provenance, pays,
date_naissance, email, fax, tel_fixe, tel_mob, date_inscription, eid, connaissances, utilisation, equipement, commentaire, mailing, rappel_anniv)
VALUES (
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17,
to_date( $18, 'DD/MM/YYYY'), $19, $20, $21, $22, to_timestamp( $23, 'YYYY-MM-DD HH24:MI:SS'), $24, $25,$26, $27, $28, $29, $30) RETURNING uid;
Comme ça passe par PDO, je suppose que les $1...$30 sont normaux
Hors ligne
#4 24/10/2013 23:53:55
- gleu
- Administrateur
Re : Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
Les $1 à $30 n'ont rien à voir avec PDO. Ils ont à voir avec le fait que vous fait un prepare, puis un execute. Il serait intéressant de voir les valeurs indiqués dans le bind/execute au niveau des traces PostgreSQL (si votre version de PG est assez récente pour les tracer). Mais bon, il est clair qu'il y a un problème avec votre programme PHP.
Guillaume.
Hors ligne
#5 25/10/2013 11:06:34
- gege2b
- Membre
Re : Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
bonjour,
j'utilise la version 8.4 (d'ailleurs je ne comprends pas pourquoi, il y a aussi la 9.2 installée mais c'est pas elle qui est utilisée... bref)
je n'arrive pas a lui faire afficher les valeurs dans les logs, juste la requete avec les placeholders...
Et là, j'ai forcé le cast en (int) pour toutes les valeurs entières de mon php (dès fois que...), et nouvelle erreur :
2013-10-25 10:52:29 CEST ERREUR: syntaxe en entrée invalide pour l'entier : « f »
Je n'ai rien qui s'appelle "f", ni dans les colonnes, ni dans les valeurs...
Si j'enlève le cast, je retrouve la même erreur qu'au début
A titre d'info, j'ai testé en codant en dur le bindValue() pour la colonne qui semble poser problème et ça n'a rien changé non plus
$req->bindValue(":pays", "France", PDO::PARAM_STR);
Est-ce que l'ordre de l'affectation des paramètres à une importance (dans mon cas, où les paramètres sont tous nommés) ?
Hors ligne
#6 25/10/2013 11:14:29
- rjuju
- Administrateur
Re : Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
À vue de nez, je dirais bien que le "f" est un bool, qu'il faudrait remplacer par un true/false.
Pour la 9.2, si elle est démarrée, elle doit écouter sur un port et/ou une ip différente. Il faut donc spécifier dans la configuration php les informations pour accéder à celle là.
L'ordre d'affectation ne devrait pas avoir d'importance, par contre vu le nombre de paramètre, il est toujours possible d'avoir un décalage entre celui auquel on s'attend et celui réellement utilisé.
Julien.
https://rjuju.github.io/
Hors ligne
#7 25/10/2013 17:55:06
- gege2b
- Membre
Re : Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
exact pour pgsql 9.2, j'avais pas remarqué... merci
Quelle paramètre doit on changer pour voir la requete complète dans les traces ?
Bon, j'ai toujour pas trouvé la raison de ce dysfonctionnement... Je continue de creuser, mais ça commence a me gaver xD
Hors ligne
#8 25/10/2013 20:08:51
- rjuju
- Administrateur
Re : Erreur " syntaxe en entrée invalide pour l'entier : « un_texte »"
Il faut paramétrer log_statement = 'all' pour tracer les bind en plus des requêtes.
Julien.
https://rjuju.github.io/
Hors ligne