这个MySQL更新查询有什么问题?

时间:2012-03-09 15:12:13

标签: mysql sql

第一次我会给你查询,然后我会告诉你我想要实现的目标,因为我可能会错误或太近。

       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的记录。

更新:我没有看到任何错误。 ITS REDIRECTS到link_building.php并显示成功消息,但不会更改MySQL表中的数据。

3 个答案:

答案 0 :(得分:3)

尝试转义数据并删除ID的更新,因为它已经在您的条件中:

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));

答案 1 :(得分:2)

如果您的列的名称类似于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执行此操作,或者更好的是,开始使用prepared statements

答案 2 :(得分:2)

首先,你忘记了你仍然需要引用你的字符串;

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");

请注意所有字符串周围添加的'

奖金评论;你应该在将字符串传递给数据库之前使用mysql_real_escape_string()