2011-06-22 5 views
1

J'ai la requête suivante:PHP PDO erreur fatale

$sql = "UPDATE db.users SET $str WHERE users.{$this->row} = {$this->value} LIMIT 1"; 

Ce qui de l'écho sur:

UPDATE db.users SET username=testUser, gid=3 WHERE users.username = mmiller LIMIT 1 

Cependant quand je fais:

$count = Db::init()->exec($sql); 

-je obtenir:

Fatal error: Uncaught exception 'PDOException' with message 

'SQLSTATE [42S22]: Colonne non trouvée: 1054 Unknown column 'mmiller' dans 'où la clause'' dans /class.php:185 Stack trace: # 0 /class.php(185) : PDO-> exec ('UPDATE db ...') # 1 /class.php(194): Utilisateur-> modifier ('nom d'utilisateur', 'gid', 'testUser', '3') # 2 {main} Renvoyé dans /class.php sur la ligne 185

Toutes les idées?

Répondre

5

Vous devez utiliser "

UPDATE db.users SET username="testUser", gid="3" WHERE users.username = "mmiller" LIMIT 1 

Assurez-vous que votre écho vous montre que. Vous pouvez utiliser ' ofcourse, quoi que flotte votre bateau :)

+0

Cela renvoie la même erreur – grep

+1

probablement pour "testuser" cette fois-ci? Je vais corriger cela aussi: P – Nanne

+0

Vous devez ajouter le '' 'autour de la' {$ this-> valeur} ', mais il y a aussi une mauvaise affectation avec cette variable' $ set'. Aussi: vous dites que vous n'avez pas besoin de préparation. déclarations, mais vous ne seriez pas avoir ce problème si vous les avez utilisé ... – Nanne

2

Vous devez utiliser des guillemets autour des valeurs de chaîne; Voyant que vous utilisez déjà PDO, il peut être avantageux d'utiliser des instructions préparées. Bien qu'un peu plus lent pour une requête unique, il augmente la sécurité et gère tous les échappements nécessaires, de sorte que vous ne rencontrerez pas ces problèmes.

+0

Theres aucune entrée de l'utilisateur, donc je n'ai pas besoin d'instructions de préparation. Cependant mettre ceci entre guillemets retourne juste la même erreur – grep

+0

@Headspin D'une certaine manière, votre base de données pense que "mmiller" est une colonne, au lieu d'une valeur. Cela revient généralement à avoir oublié les guillemets autour d'une valeur de chaîne. Si vous le mettez entre guillemets, il est impossible que votre base de données pense que vous faites référence à une colonne. –

+0

Vous savez quoi, vous avez raison, c'était juste une des valeurs de la chaîne $ str qui nécessitait les guillemets. Corriger pour une réponse plus complète. Merci – grep