[RESOLU] Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 en ALPHA mais pas en NUMERIQUE !

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 : [RESOLU] Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 en ALPHA mais pas en NUMERIQUE !

Re: Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 en ALPHA mais pas en NUMERIQUE !

par josse34 » 14 janv. 2016, 18:28

$connexion->query('INSERT INTO base_client (id, pseudo) VALUES ('.$user->id.', "'.$user->username.'") ON DUPLICATE KEY UPDATE pseudo = VALUES(pseudo)');

si l'on suppose qu'il n'y a pas de " dans $user->username
Bon sang de bonsoir! De simples guillemets!
J'enrage!!!!!!!!!!!!!!!!!
Merci beaucoup!

Re: Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 en ALPHA mais pas en NUMERIQUE !

par or 1 » 14 janv. 2016, 18:25

$connexion->query('INSERT INTO base_client (id, pseudo) VALUES ('.$user->id.', "'.$user->username.'") ON DUPLICATE KEY UPDATE pseudo = VALUES(pseudo)');

si l'on suppose qu'il n'y a pas de " dans $user->username

Re: Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 en ALPHA mais pas en NUMERIQUE !

par ynx » 14 janv. 2016, 18:25

Salut,

Essaye d'afficher tes requêtes SQL avant de les exécuter, tu devrais facilement comprendre ton erreur.
Utilise de préférence les requêtes préparée ou la méthode PDO::quote() pour éviter ce genre d'erreur.

Bonne journée,

Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 en ALPHA mais pas en NUMERIQUE !

par josse34 » 14 janv. 2016, 18:05

Bonjour.

Je suis navré, j'ai fait du PDO des dizaines de fois (il y a un petit moment :mrgreen: )mais la il y a quelques chose de basique qui m'échappe depuis 2 heures!

Sous Joomla nous pouvons récupérer les données utilisateurs via

Code : Tout sélectionner

$user = JFactory::getUser();
cela renvoie notamment :
$user->id (405)
$user->username (test)

Connexion classique ayant fonctionné des milliards de fois :

Code : Tout sélectionner

$connexion = new PDO('mysql:host=***;dbname=***','***','***'); $connexion->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); $connexion->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ); $connexion->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); $connexion->setAttribute(\PDO::ATTR_CASE, \PDO::CASE_LOWER);
Puis on crée la table si elle n'existe pas :

Code : Tout sélectionner

$connexion->query("CREATE TABLE IF NOT EXISTS base_client (id INT PRIMARY KEY, pseudo VARCHAR(255));");
Cette injection

Code : Tout sélectionner

$connexion->query('INSERT INTO base_client (id, pseudo) VALUES ('.$user->id.', '.$user->username.') ON DUPLICATE KEY UPDATE pseudo = VALUES(pseudo)');
me renvoie l'erreur
Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'test' in 'field list'
Pourquoi diable?!!!!
Avec

Code : Tout sélectionner

$connexion->query('INSERT INTO base_client (id, pseudo) VALUES ('.$user->id.', '.$usertest.') ON DUPLICATE KEY UPDATE pseudo = VALUES(pseudo)');
Cela fonctionne avec des chiffres genre $usertest="123456"; mais pas avec des lettres genre $usertest="abcdef"; !!!!
Même si je mets pseudo en TEXT, j'obtiens toujours une erreur avec $usertest="abcdef"; :
Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'abcdef' in 'field list'
Idem avec REPLACE au lieu de INSERT+UPDATE

Merci!