我有使用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,并且它总是正确显示。
如何确保数据库始终更新/插入数据库?
答案 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"]);