PDO 为插入和重复密钥更新准备的语句,带有命名占位符
2022-08-30 20:43:38
我想将PDO INSERT和UPDATE预准备语句切换到INSERT和ON DUPLICATE KEY UPDATE,因为我认为它会比我目前正在做的事情更有效,但是我很难找出正确的语法来与命名占位符和bindParam一起使用。
我在SO上发现了几个类似的问题,但我是PDO的新手,无法成功地根据我的标准调整代码。这是我尝试过的,但它不起作用(它不会插入或更新):
try {
$stmt = $conn->prepare('INSERT INTO customer_info (user_id, fname, lname) VALUES(:user_id, :fname, :lname)'
'ON DUPLICATE KEY UPDATE customer_info SET fname= :fname,
lname= :lname
WHERE user_id = :user_id');
$stmt->bindParam(':user_id', $user_id);
$stmt->bindParam(':fname', $_POST['fname'], PDO::PARAM_STR);
$stmt->bindParam(':lname', $_POST['lname'], PDO::PARAM_STR);
$stmt->execute();
}
这是我代码的简化版本(我有几个查询,每个查询有20到50个字段)。我目前正在首先更新并检查更新的行数是否大于0,如果没有,则运行Insert,并且每个查询都有自己的一组bindParam语句。