【问题标题】:PHP Update Data in mySQL Inconsistant, only UPDATES sometimesPHP 更新 mySQL 中的数据不一致,有时只更新
【发布时间】:2011-08-10 18:50:39
【问题描述】:

我有使用 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,并且总是正确显示。

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

【问题讨论】:

    标签: php ajax insert insert-update


    【解决方案1】:

    不需要查询数据库来查看数据是否已经存在。只要你有好的数据,你每次都可以删除该行。如果该行不存在,则 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"]);
    

    【讨论】:

      【解决方案2】:

      您必须查询该表以了解该 id 是否已存在或不存在,然后编写一个更新查询,即

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

      如果id不存在则使用插入

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

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

      【讨论】:

      • 是的,响应已成功回显,但只是没有插入。我会试试你的方法,看看它是否解决了我的问题!
      【解决方案3】:

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

      【讨论】:

      • 是的,发回的响应工作正常。它实际上是一个 CSS 属性。
      • 是的,我也不确定我的脚本或数据库出了什么问题!
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多