2012-02-02 207 views
1

我正在嘗試執行更新/插入MySQL的查詢。應插入,如果尚未在數據庫中。更新/插入MySQL查詢

但是,它不會更新。我的db連接很好。我想不明白。

$sql = "UPDATE jos_bl_paid SET u_id='$uid', m_id = '$mid', t_id = '$cus', pd = '1', paypal_payment='$txn',p_date=NOW() WHERE u_id = '$uid' AND '$mid' = m_id ";    

$test45 = mysql_affected_rows(); 
    if ($test45 == 0) { 


$sql = "INSERT INTO jos_bl_paid(paypal_payment,u_id,m_id,pd,t_id,p_date)VALUES('$txn','$uid','$mid','1','$cus',NOW())"; 

    if (!mysql_query($sql)) { 
     error_log(mysql_error()); 
     exit(0); 
         } 

echo 'Yes'; 
}else{ 
echo 'No'; 
} 
+0

什麼是錯誤? – Fosco 2012-02-02 20:24:53

+1

**警告**您的代碼可能容易受到sql注入攻擊! – 2012-02-02 20:25:00

+0

使用'INSERT ... ON DUPLICATE KEY UPDATE'而不是單獨的'INSERT'和'UPDATE'。 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – dfsq 2012-02-02 20:28:35

回答

2

從你顯示的代碼你甚至沒有運行更新查詢。你需要把

if (!mysql_query($sql)) { 
    error_log(mysql_error()); 
    exit(0); 
} 

前行

$test45 = mysql_affected_rows(); 

爲實現這一目標,甚至返回你想要

+0

似乎是這樣的問題!仍在運行測試! – user1079804 2012-02-02 20:40:01

+0

另外你也許應該清理你的變量來防止像@Daniel所說的sql注入,除非這是在這段代碼之前完成的。也可以做得更好,因爲@dfsq在一個聲明中用'INSERT ... ON DUPLICATE KEY UPDATE'表示 – Henesnarfel 2012-02-02 20:44:54

0

我會使用ON DUPLICATE KEY UPDATE mysql命令使這些到一個語句什麼。我猜你的問題是插入可能失敗,因爲你架構中設置了一些獨特的鍵,即使實際的uid尚不存在,所以更新也失敗了。你能準確發佈你得到的錯誤信息嗎?

0

檢查你的最後的值更新詢問我發現有一個錯誤,從我的側面固定它 試試這個

$sql = mysql_query("UPDATE jos_bl_paid SET u_id='$uid',m_id = '$mid', t_id = '$cus', pd = '1', paypal_payment='$txn',p_date=NOW() WHERE u_id = '$uid' AND m_id = '$mid'") or die(mysql_error()); 

答案已被更新,請嘗試更新的一個

0

從您發佈的代碼,看起來您正在將$sql字符串設置爲更新語句,但在檢查受影響的行數之前沒有執行它。

你可能需要檢查mysql_affected_rows();

否則你不告訴數據庫進行任何更新之前調用mysql_query($sql)

0

如果在更新新的值是相同的舊的MySQL將無法更新行,你將有mysql_affected_rows爲0。如果您有場u_id主鍵,m_id可以使用INSERT ON DUPLICATE UPDATEhttp://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

如果您沒有,則可以使用計數查詢:

SELECT count(*) FROM jos_bl_paid WHERE u_id = '$uid' AND '$mid' = m_id 

決定是否應更新或插入新的。