Перезапись данных в таблице MySQL - PullRequest
2 голосов
/ 12 июля 2010

С помощью приведенного ниже запроса я пытаюсь переписать 10-е поле в таблице MySQL с именем «login» значением NEW_VALUE. Это не работает. Является ли приведенный ниже код правильным методом для перезаписи существующих данных в таблице MySQL?

Заранее спасибо,

John

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

Ответы [ 4 ]

6 голосов
/ 03 января 2013

Просто в качестве дополнения, если кто-то все еще ищет реальную перезапись, а не просто обновление.Если вы хотите OVERWRITE всегда, (не обновлять, просто перезаписать), вы можете использовать REPLACE вместо INSERT.

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE, старая строка удаляется перед новой строкойвставлен.См. Раздел 13.2.5, «Синтаксис INSERT»

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

2 голосов
/ 12 июля 2010

Если я понял ваш вопрос, то ответ «нет». Это не специфическая проблема для mysql, это общий вопрос SQL. Я настоятельно рекомендую пройти учебник по SQL, лучший из известных мне, если он здесь:

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

Чтобы ответить на ваш вопрос, вы должны уметь:

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

где "foo" - это имя десятого поля.

Несколько других комментариев:

Во-первых, не полагайтесь на положение ваших полей, всегда явно перечисляйте имена полей. Например, лучше пойти

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

вместо

INSERT INTO login VALUES (1, 'Fred') 

Пункт 2: Вы прямо ввели значение $ cleanurl в свой запрос. Конечно, вы должны изучать одну вещь за раз, но помните, что это очень опасно. Если $ cleanurl содержит что-то вроде "'); DROP TABLE login;" тогда у вас могут быть проблемы. Это называется инъекцией SQL и является источником постоянных проблем безопасности. Не вдаваясь в подробности, вы должны научиться использовать подготовленные высказывания.

Пункт 3: PHP поставляется с библиотекой PDO, которая поддерживает подготовленные операторы. Он также предоставляет общий API для взаимодействия с вашей базой данных, поэтому, если вы обнаружите, что вам нужно перейти с Mysql на другую СУБД, PDO устранит большинство различий. Используя функцию mysql_query, вы подключаетесь к использованию mysql.

Вам не нужно решать все эти проблемы одновременно, но не забывайте и о них, как только вы познакомитесь с PHP и SQL, вернитесь к вопросам о PDO и подготовленным операторам.

2 голосов
/ 12 июля 2010

Нет, ваш код неверен.Вы добавляете новую строку в свою таблицу, не обновляя существующие значения.Чтобы обновить существующие значения, вы хотите использовать оператор обновления:

Обновление определенной записи

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

Чтобы обновить всю таблицу

mysql_query("Update login SET nameOfYourColumn = '$cleanURL'")
1 голос
/ 12 июля 2010

Первое: INSERT добавляет новую запись в таблицу, UPDATE обновляет (перезаписывает) одну или несколько существующих записей.

Второе: UPDATE необходимо знать имя столбца для обновления и какие строкиобновление

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

В-третьих: возможно, стоит прочитать несколько основных руководств по MySQL / SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...