2010-07-12 7 views
1

Avec la requête ci-dessous, j'essaie d'écraser le 10ème champ dans une table MySQL appelée "login" avec la valeur NEW_VALUE. Ça ne fonctionne pas. Le code ci-dessous est-il la bonne méthode pour écraser des données existantes dans une table MySQL?Écrasement de données dans une table MySQL

Merci à l'avance,

John

INSERT INTO login VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'NEW_VALUE', NULL, NULL, NULL) 
+1

Non, et le code n'a rien à voir avec PHP. Vous devez apprendre SQL (ou MySQL, comme cela peut être le cas). À tout le moins, vous devriez chercher un tutoriel couvrant les bases de SQL. – aib

+0

** INSERT ** est différent de ** UPDATE **. Insert ajoute de nouveaux enregistrements, tandis que UPDATE édite des enregistrements EXISTANTS. – LoudSpeaker

Répondre

2

Pas votre code est incorrect. Vous ajoutez une nouvelle ligne à votre table sans mettre à jour les valeurs existantes. Pour mettre à jour les valeurs existantes, vous voulez utiliser une instruction de mise à jour:

Upate un record spécifique

mysql_query("Update login SET nameOfYourColumn = '$cleanURL' WHERE primaryKey = idOfRowToUpdate") 

Pour mettre à jour toute la table

mysql_query("Update login SET nameOfYourColumn = '$cleanURL'") 
+0

Probablement vouloir des citations autour de la variable, mais cela. –

+0

les a ajoutés, merci de souligner les citations manquantes. – Tommy

+0

Merci ... cela semble prometteur ... mais maintenant il est juste en train de mettre une entrée vide/nulle dans le champ. Une idée de pourquoi cela arriverait? – John

1

Tout d'abord: INSERT ajoute un nouvel enregistrement à une table, UPDATE met à jour (remplace) un ou plusieurs enregistrements existants.

Deuxième: mise à jour doit connaître le nom de la colonne à mettre à jour, et les lignes à mettre à jour

UPDATE <tableName> 
    SET <columnName> = '$cleanurl' 
WHERE <some condition to identify which record should be updated> 

Troisièmement: il est probablement utile de votre temps à lire quelques tutoriels de base sur MySQL/SQL

2

Si j'ai compris votre question, la réponse est "non". Ce n'est pas non plus un problème spécifique à mysql, c'est une question SQL générique. Je recommande fortement passer par un tutoriel SQL, le meilleur que je sais si est ici:

http://philip.greenspun.com/sql/

Pour répondre à votre question, vous devriez être en mesure de le faire:

mysql_query("UPDATE login SET foo = '$cleanurl'"); 

où " foo "est le nom du dixième champ.

Quelques autres commentaires cependant:

Tout d'abord, ne reposent pas sur la position de vos champs, toujours lister explicitement les noms de champ. Par exemple, il est préférable d'aller

INSERT INTO login (id, name) VALUES (1, 'Fred') 

au lieu de

INSERT INTO login VALUES (1, 'Fred') 

point 2: Vous avez directement intégré la valeur de cleanurl $ dans votre requête. Bien sûr, vous devez apprendre une chose à la fois, mais sachez que c'est très dangereux. Si $ cleanurl contient quelque chose comme "'), DROP TABLE login;" alors vous pourriez avoir des ennuis. C'est ce qu'on appelle l'injection SQL et est la source de problèmes de sécurité constants. Sans entrer dans trop de détails, vous devriez apprendre à utiliser des instructions préparées. Point 3: PHP est livré avec une bibliothèque appelée PDO qui supporte les instructions préparées. Il fournit également une API commune pour interagir avec votre base de données, donc si vous trouvez que vous devez passer de Mysql à un autre SGBD, PDO résout la plupart des différences. En utilisant la fonction mysql_query, vous vous verrouillez en utilisant mysql.

Vous n'avez pas à résoudre tous ces problèmes simultanément, mais ne les oubliez pas non plus, une fois que vous vous serez familiarisé avec PHP et SQL, revenez aux points sur PDO et les instructions préparées.

5

Juste comme un ajout si quelqu'un est toujours à la recherche d'un remplacement réel et pas seulement une mise à jour. Si vous voulez OVERWRITE toujours, (pas de mise à jour, juste écraser), vous pouvez utiliser REPLACE au lieu de INSERT.

REPLACE fonctionne exactement comme INSERT, sauf que si une ancienne ligne de la table a la même valeur que d'une nouvelle ligne pour une clé primaire ou un index UNIQUE, l'ancienne ligne est supprimée avant l'insertion de la nouvelle ligne. Voir la section 13.2.5, « Syntaxe de INSERT »

http://dev.mysql.com/doc/refman/5.5/en/replace.html

Questions connexes