我第一次尝试使用ON UPDATE DUPLICATE KEY子句,下面是这个链接
SQL-如果存在更新其他插入到
我得到一个错误,在我的sql语法:
SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第2行“AJAY KUMAR”附近使用的正确语法正在执行的SQL是:在重复键上插入费用账户余额(监护人姓名、账号、已付金额、到期日、逾期日、总费用、更新日)值('AJAY KUMAR',10',0,12550,0,12550',2017-02-10 21:28:05')更新guardian_name=VALUES('AJAY KUMAR')错误信息:数组([0]=
在我的情况下,唯一的键是帐户号
,这是我的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')
错误在哪里?
在重复密钥更新时,不能在中指定绝对值:
ON DUPLICATE KEY UPDATE guardian_name = VALUES ('$father_name')
试一试
ON DUPLICATE KEY UPDATE guardian_name = VALUES(guardian_name)
请注意,赋值的右边部分是来自VALUES
的新字段,左边是现存记录;"UPDATE a=VALUES(a)"意味着"将a从VALUES放入记录",而不是"将所有内容保留为它是"。
此外,您可能希望在花括号中写入变量:
...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
]);
更好的是,绑定参数。
否则,如果监护人的名字是Ajay Al'Kumar(请注意引号),或者传递的是字符串值而不是整数值,可能会发生奇怪的事情。