我第一次尝试使用ON UPDATE DUPLICATE KEY子句,跟随此链接
SQL - IF EXISTS UPDATE ELSE INSERT INTO
我的sql语法出错:
SQLSTATE [42000]:语法错误或访问冲突:1064您有 SQL语法错误;查看与您的手册相对应的手册 在''AJAY KUMAR'附近使用正确语法的MySQL服务器版本')' 第2行正在执行的SQL是:INSERT INTO fee_acc_balance (guardian_name,account_no,paid_amount,due,days_overdue, total_fees,updated_on)VALUES('AJAY KUMAR','10',0,12550,0, 12550,'2017-02-10 21:28:05')ON 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 :(得分:2)
您无法在ON DUPLICATE KEY UPDATE
中指定绝对值:
ON DUPLICATE KEY UPDATE guardian_name = VALUES ('$father_name')
尝试
ON DUPLICATE KEY UPDATE guardian_name = VALUES(guardian_name)
请注意,作业的正确部分是来自VALUES
的新字段,左侧是现存记录; "更新a = VALUES(a)"意味着"将VALUES中的a放入记录"中,而不是"保留所有内容"。
此外,您可能希望用大括号编写变量:
...VALUES ('{$father_name}', '{$account->account_no}', {$payments}, {$sum}, 0, {$sum}, '{$now}')
甚至更好地使用PDO的PREPARE
d语句:
$stmt->prepare("INSERT... VALUES(?, ?, ?, ?, 0, ?, ?)");
$stmt->execute([
$father_name,
$account->account_no,
$payments,
$sum,
$sum,
$now
]);
,更好的是,bound parameters。
否则,如果监护人名称为Ajay Al' Kumar(注意引号)或传递字符串值而不是整数1,则可能会发生奇怪的事情。