mySQL中的PHP更新数据Inconsistant,有时仅更新

时间:2011-04-22 05:26:25

标签: php ajax insert insert-update

我有使用GET方法使用Ajax将URL变量发送到PHP页面的值。

在页面上,我有:

$value=$_GET["q"];
$id=$_GET["id"];
$mod=$_GET["mod"];

我开始使用UPDATE SET方法修改mySQL数据库中的值。

我用过:$num_rows= mysql_num_rows($result);

使用If Else语句插入值(如果不存在)或更新列“属性”

但这是非常不一致的,往往不会更新,并且已经开发了几个重复的值(even though if($num_rows > 0){ (WHERE Object_ID = '".$mod."' AND Type='".$id."')它不应该插入,但它确实已经插入了。)

所以我改用了这个:

$sql="SELECT * FROM Attributes WHERE Object_ID = '".$mod."' AND Type='".$id."'";
$result = mysql_query($sql);

    mysql_query("DELETE FROM Attributes WHERE Object_ID = '".$mod."' AND Type = '".$id."'");

    mysql_query("INSERT INTO Attributes (Object_ID, Type, Attribute)
        VALUES ('".$mod."', '".$id."', '".$value."')");

我知道,真的很糟糕。但是,即使这种方法并不总是正确插入值。

我知道变量正在进入页面,因为响应将使用innerHTML写入div,并且它总是正确显示。

如何确保数据库始终更新/插入数据库?

4 个答案:

答案 0 :(得分:0)

为什么不为条件运行SELECT COUNT(*)并检查返回的内容并根据运行UPDATE或INSERT的内容进行检查?

答案 1 :(得分:0)

我真的很困惑你的数据库操作有什么问题,但确保的唯一方法是将你的php脚本的响应发送回ajax。 它可以是json或简单文本,通知您请求了哪个操作以及执行了什么操作。根据响应,您可以调整您想要的内容。

答案 2 :(得分:0)

您必须查询该表以查明该ID是否已存在,如果它已退出,则写入更新查询,即

 $update = "update tbl_name set column=value where id = $_GET['id']"

如果id不存在则使用insert

$ insert =“插入......”

希望这能解决您的问题。此外,您还必须以字符串格式或在$ .Ajax的成功方法中获得的其他值来回显响应。

答案 3 :(得分:0)

无需查询数据库以查看数据是否已存在。只要您拥有良好的数据,就可以每次都删除该行。如果该行不存在,则DELETE不执行任何操作。

每次都运行这两个查询,你会没事的。

mysql_query("DELETE FROM Attributes WHERE Object_ID = '$mod' AND Type='$id'"); 
mysql_query("INSERT INTO Attributes (Object_ID, Type, Attribute) VALUES ('$mod', '$id', '$value'");

请至少在使用$ _GET执行任何操作之前,先通过mysql_real_escape_string运行它们。您可能应该进行更多检查,以确保传入的值有效。

$value=mysql_real_escape_string($_GET["q"]); 
$id=mysql_real_escape_string($_GET["id"]); 
$mod=mysql_real_escape_string($_GET["mod"]);