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

)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
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!
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]$user = JFactory::getUser();[/code] cela renvoie notamment :
$user->id ([b]405[/b])
$user->username ([b]test[/b])
Connexion classique ayant fonctionné des milliards de fois :
[code]$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);
[/code]
Puis on crée la table si elle n'existe pas : [code]$connexion->query("CREATE TABLE IF NOT EXISTS base_client (id INT PRIMARY KEY, pseudo VARCHAR(255));");[/code]
Cette injection [code]$connexion->query('INSERT INTO base_client (id, pseudo) VALUES ('.$user->id.', '.$user->username.') ON DUPLICATE KEY UPDATE pseudo = VALUES(pseudo)'); [/code] me renvoie l'erreur [quote]Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'test' in 'field list'[/quote]
Pourquoi diable?!!!!
Avec [code]$connexion->query('INSERT INTO base_client (id, pseudo) VALUES ('.$user->id.', '.$usertest.') ON DUPLICATE KEY UPDATE pseudo = VALUES(pseudo)'); [/code] 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"; :
[quote]Error: 42S22 - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'abcdef' in 'field list'[/quote]
Idem avec REPLACE au lieu de INSERT+UPDATE
Merci!