PDO INSERT ve UPDATE tarafından hazırlanan deyimleri INSERT ve ON DUPLICATE KEY UPDATE olarak değiştirmek istiyorum çünkü benden çok daha verimli olacağını düşünüyorum Şu anda yapıyor, ancak adlandırılmış yer tutucuları ve bindParam ile kullanmak için doğru sözdizimi bulmakta sorun yaşıyorum.PDO, INSERT ve ON DUPLICATE ANAHTAR GÜNCELLEŞTİRME ifadeleri için hazırlanmış yer tutucularla hazırlanmış
SO ile ilgili birkaç benzer soru buldum, ancak PDO için yeniyim ve kriterlerimin kodunu başarıyla ayarlayamadım. Bu ne denedim, ama (o eklemek veya güncelleştirmek değil) çalışmaz:
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();
}
Bu benim kod basitleştirilmiş bir versiyonudur (Birkaç sorguları var ve her sorgu arasında yer alır 20 - 50 alan). Şu anda önce güncelleniyorum ve güncellenen satırların sayısının 0'dan büyük olup olmadığını ve ardından Ekle'yi çalıştırmıyor olup olmadığını kontrol ediyorum ve bu sorguların her birinin kendi bindParam ifadeleri kümesi var.
birden fazla yerde aynı yer tutucu tekrar kullanmayın:
Eğer ekleme ve aynı değerler kullanılarak güncellenmesi (ve farklı değerlerle güncellenmiyorsa) ediyorsanız, bu düzeltilmiş sorgu sözde koddur aynı sorguda. PDO bağlantınız istisnalar atacak mı? "BindParam", "bindValue" ya da "execute" üzerinden parametreleri geçirme gereksiniminiz olmadıkça daha iyi bir seçimdir. – DCoder
Aynı yer tutucuyu birden çok yerde kullanmamam gerektiğini söylediğinizde, 2 set bindParam ifadesine ihtiyacım var mı? Şu anda - set (PDOException $ e) {echo 'Error:' ile ayarlanmış. $ e-> getMessage();} - ve bu kod için herhangi bir hata mesajı almıyorum. –
Sorgulamayı deneyin/yakalamak yeterli değildir. [Hata İşleme] 'ye bakın (http://us.php.net/manual/en/pdo.error-handling.php) ve hatalara ilişkin istisnalar atacak şekilde yapılandırın. – DCoder