我想将 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,如果不是,则运行插入,并且每个查询都有自己的一组 bindParam 语句。