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 ステートメントのセットがあります。