2017-02-10 75 views
0

我試圖使用ON UPDATE DUPLICATE KEY子句首次,以下鏈接ON UPDATE DUPLICATE KEY語法錯誤?

SQL - IF EXISTS UPDATE ELSE INSERT INTO

,我讓我的SQL語法錯誤:

SQLSTATE [ 42000]:語法錯誤或訪問衝突:1064您的SQL語法中有一個 錯誤;檢查與您的 MySQL服務器版本對應的手冊,以找到在''AJAY KUMAR'附近使用的正確語法)' 在第2行正在執行的SQL是:INSERT INTO fee_acc_balance (guardian_name,account_no,paid_amount,due,days_overdue, VALUE('AJAY KUMAR','10',0,12550,0, 12550,'2017-02-10 21:28:05')關於DUPLICATE KEY UPDATE guardian_name = VALUES('AJAY KUMAR' 「)錯誤的信息:陣列([0] => 42000 [1] => 1064 [2] =>你有一個錯誤..

在我的情況下的固有密鑰是account_no,這是我的sql:

INSERT INTO fee_acc_balance (guardian_name, account_no, paid_amount, due, days_overdue, total_fees, updated_on) 
VALUES ('$father_name', '$account->account_no', $payments, $sum, 0, $sum,'$now') 
ON DUPLICATE KEY UPDATE guardian_name = VALUES ('$father_name') 

錯誤在哪裏?

+0

您可以將變量定義添加到您的問題中嗎? $ father_name從哪裏來? – Nathan

+0

這聽起來好像你問蘋果是否成熟,當我問你兩個蘋果和三個蘋果的總和:)!但是,如果您在回答之前必須知道,$ father_name來自另一個數據庫調用。以上所有變量都通過各種數據庫和函數調用來計算。我相信他們不必回答這個問題。相信我的信息就足以回答。 –

回答

2

不能指定ON DUPLICATE KEY UPDATE絕對值:

ON DUPLICATE KEY UPDATE guardian_name = VALUES ('$father_name') 

嘗試用

ON DUPLICATE KEY UPDATE guardian_name = VALUES(guardian_name) 

注意,轉讓的右邊部分是從VALUES進入的新領域,並在左側是現存的記錄; 「UPDATE a = VALUES(a)」表示「將VALUES中的a放入記錄中」,而不是「保持原樣」。

此外,您可能需要編寫變量在大括號:

...VALUES ('{$father_name}', '{$account->account_no}', {$payments}, {$sum}, 0, {$sum}, '{$now}') 

甚至更​​好的使用PREPARE d語句PDO:

$stmt->prepare("INSERT... VALUES(?, ?, ?, ?, 0, ?, ?)"); 
$stmt->execute([ 
    $father_name, 
    $account->account_no, 
    $payments, 
    $sum, 
    $sum, 
    $now 
]); 

和更好的是,bound parameters

否則,如果監護人名稱是Ajay Al'Kumar(注意引號)或傳遞的是字符串值而不是整數值,則可能會發生奇怪的事情。

+0

我不明白的是我在哪裏告訴mysql guardian_name是$ father_name?當我在ON DUPLICATE KEY UPDATE語句中寫入'VALUES(guardian_name)'而不是'VALUES($ father_name)'時,mysql會自動從我的插入語句中選擇值? –

+1

你不需要。您正在嘗試將$ father_name插入到guardian_name中,因此,MySQL已經知道VALUES(guardian_name)是'AJAY KUMAR'。所以你只需要指定VALUES(guardian_name)必須進入'guardian_name'(字段)。 – LSerni

+0

我也可以同時提供多個列的值嗎?例如'在DUPLICATE KEY UPDATE(guardian_name,account_no,blah,blah-blah)VALUES(guardian_name,account_no,blah,blah-blah)'。我觀察到這種方法不起作用。我該怎麼做? –

相關問題