2009-02-04 6 views
1

Ma table est:ligne de mise à jour d'erreur dans le tableau postgres

CREATE TABLE A(
    id serial NOT NULL, 
    date timestamp without time zone, 
    type text, 
    sub_type text, 
    filename text, 
    filepath text, 
    filesize integer, 
); 

J'ai une routine de mise à jour:

$Query = "UPDATE A SET type=\"" . $strType . "\" where id=" . intval($ID); 

Problème:

Lorsque $ strType est une chaîne, comme "la laitue" Je reçois cette erreur:

ERROR: column "lettuce" does not exist 

est un int, pas d'erreur.

Des idées?

plus fond:

  • le code d'insertion ajoute le nom de fichier, filepath, les deux types de texte avec succès

Répondre

4

Dans SQL, les guillemets doubles sont délimiteurs d'identification. Votre instruction UPDATE tente de définir la colonne type sur la valeur de la colonne "lettuce", qui est une erreur s'il n'y a pas de colonne nommée laitue.

Vous voulez utiliser les guillemets simples pour délimiter une chaîne de caractères dans SQL:

$Query = "UPDATE A SET type='" . $strType . "' where id=" . intval($ID); 

Voir aussi "Do different databases use different name quote?"

3

Votre codage est ouvert à l'injection SQL. Utilisez des espaces réservés (probablement des points d'interrogation non indiqués) et transmettez la valeur séparément. Cela évite les problèmes au XKCD.

Bill a la réponse à votre problème immédiat concernant les noms de colonnes et les chaînes.

+0

Merci pour vos commentaires. – cbrulak

Questions connexes