Что не так с этим MySQL Update Query? - PullRequest
0 голосов
/ 09 марта 2012

1-й, я дам вам запрос, а затем скажу, чего я пытаюсь достичь, так как я могу быть слишком неправ или слишком близок.

       mysql_query("UPDATE link_building SET 
ID=$ID,Site=$Site,Date=$Date,Target_Site=$Target_Site,
        Target_Contact_Email=$Target_Contact_Email,
    Target_Contact_Name=$Target_Contact_Name,
        Link_Type=$Link_Type,Link_Acquired=$Link_Acquired,
    Notes=$Notes,Link_URL=$Link_URL WHERE ID=" . $ID);

Чего я пытаюсь достичь? Я хочу обновить поля

("ID","Site","Date","Target_Site","Target_Contact_Email","Target_Contact_Name",
    "Link_Type","Link_Acquired","Notes","Link_URL")

в таблице link_building со значениями, хранящимися в переменных

    ("$ID","$Site","$Date","$Target_Site","$Target_Contact_Email","$Target_Contact_Name",
"$Link_Type","$Link_Acquired","$Notes","$Link_URL")

Но я только хочу обновить запись, чей Id равен $ ID.

ОБНОВЛЕНИЕ: Я НЕ ВИДУ ОШИБКУ. ЕГО ПЕРЕПИСЫВАЕТСЯ НА link_building.php и отображает сообщение об успехе, но не изменяет данные в таблице MySQL.

Ответы [ 3 ]

3 голосов
/ 09 марта 2012

Попробуйте экранировать данные и удалить обновление идентификатора, поскольку оно уже в ваших условиях:

mysql_query("UPDATE link_building SET Site='".mysql_real_escape_string($Site)."',Date='".mysql_real_escape_string($Date)."',Target_Site='".mysql_real_escape_string($Target_Site)."', Target_Contact_Email='".mysql_real_escape_string($Target_Contact_Email)."', Target_Contact_Name='".mysql_real_escape_string($Target_Contact_Name)."', Link_Type='".mysql_real_escape_string($Link_Type)."',Link_Acquired='".mysql_real_escape_string($Link_Acquired)."', Notes='".mysql_real_escape_string($Notes)."',Link_URL='".mysql_real_escape_string($Link_URL)."' WHERE ID=" . intval($ID));
2 голосов
/ 09 марта 2012

Во-первых, вы забываете, что вам все еще нужно заключать в кавычки свои строки;

mysql_query("UPDATE link_building SET Site='$Site', Date='$Date',".  
            "Target_Site='$Target_Site', Target_Contact_Email='$Target_Contact_Email',".
            "Target_Contact_Name='$Target_Contact_Name', Link_Type='$Link_Type',".
            "Link_Acquired='$Link_Acquired', Notes='$Notes', Link_URL='$Link_URL' ".
            "WHERE ID=$ID");

Обратите внимание на добавленные ' s вокруг всех строк.

Замечание о бонусе;вам действительно следует использовать mysql_real_escape_string () в ваших строках, прежде чем передавать их в базу данных.

2 голосов
/ 09 марта 2012

, если ваши столбцы названы как Target Site (с пробелом в нем), вы должны указать это в своем запросе (что заставит вас добавлять к нему обратные пометки).Кроме того, вам придется добавить кавычки в столбцы, которые хранят все, что строк.Ваш запрос должен выглядеть следующим образом:

UPDATE
  link_building
SET 
  ID = $ID,
  Site = '$Site',                   // single quotes for values
  Date = '$Date',                   // ...
  ´Target Site´ = '$Target_Site'    // and ´ for fields
  [...]

. Это должно решить, почему запрос не работает (кроме того: не то, как бит или форматирование делает его намного более читабельным).*

вы не предоставили информацию об этом, но, пожалуйста, обратите внимание, что вы всегда должны очищать свои переменные перед использованием (ваш код не выглядит так, как вы), чтобы избежать SQL-инъекций.Вы можете сделать это, используя mysql_real_escape_string или, что еще лучше, начать использовать подготовленные операторы .

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