1

我有使用 GET 方法将 URL 变量发送到使用 Ajax 的 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

4 回答 4

0

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

于 2011-04-22T05:35:54.337 回答
0

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

于 2011-04-22T05:52:42.680 回答
0

您必须查询表以查明 id 是否已经存在,如果它退出然后编写更新查询,即

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

如果 id 不存在,则使用插入

$insert = "插入......"

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

于 2011-04-22T05:54:50.183 回答
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"]);
于 2011-04-22T06:04:11.093 回答