2011-04-22 90 views
1

我有值使用GET方法使用Ajax發送URL變量到PHP頁面。mySQL中的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

爲什麼不對該條件運行SELECT COUNT(*)並檢查返回結果,並基於該結果運行UPDATE或INSERT?

0

我真的很困惑你的數據庫操作有什麼問題,但唯一確保的方法是從你的php腳本發回響應給ajax。 它可以是json或簡單的文本,通知您哪些操作已被請求以及執行了哪些操作。根據不同的反應,你可以調整你想要的。

+0

是的,發回的迴應工作正常。它實際上是一個CSS屬性。 – 2011-04-22 06:01:21

+0

是的我不確定我的腳本或數據庫有什麼問題! – 2011-04-22 06:02:14

0

你要查詢表,以找出是否該ID已經存在,有或沒有,如果它退出,然後寫一個更新查詢即

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

,如果ID不存在,則使用插入

$ insert =「插入......」

希望這可以解決您的問題。更進一步,你必須以字符串格式或其他一些你會在$ .Ajax的成功方法中得到的值來回應這裏的迴應。

+0

是的,響應成功回顯,但沒有插入。我會嘗試你的方法,看看它是否解決了我的問題! – 2011-04-22 06:02:55

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