sql ekleme ve güncelleme soru

3 Cevap php

Ben bir veritabanına veri eklemek için bir form var. Bu form alanlarının içeriğini alır ve sonra bağlamda girilen bilgileri gösteren sonuç sayfasını görüntüler. Geri önceki formun gitmek kullanıcı bilgileri düzenlemek için bu sayfada bir bağlantı vardır. Açıkçası, ben eklenen yinelenen kayıtları istemiyorum. Bir rekor zaten varsa, bir güncelleştirme deyimini kullanmak için kolay bir yol var mı? Ajax ve php ile yapıyorum.

3 Cevap

Bir göz atın:

INSERT ... ON DUPLICATE UNIQUE INDEX veya PRIMARY KEY eşleştirilir bir UPDATE sorgusu sorunu sağlayacaktır.

REPLACE tam olarak aynı çalışır, ancak satır bulunursa, eski satır öncesinde bir yenisini takmadan silinir. Basamaklı siler kullanırken, bu özellikle dikkate almak bir şeydir!

MySQL ne istiyorsun hangi bir INSERT deyimi için ON YİNELENEN KEY UPDATE eklenmesini destekler.

O, bunu güncellemek gelmez eğer 'kullanıcı adı' veya 'e-posta' gibi bir alan var varsayarsak, sen zaten bir rekor olup olmadığını denetlemek için bu alandaki faydalanmak olabilir.

$res = mysql_query("SELECT primary_key FROM my_table WHERE `email` = '" . mysql_real_escape_string($email) . "'");

if($row = mysql_fetch_array($res))
{
    // Record exists, update it
    $q = "UPDATE my_table SET `username` = '" . mysql_real_escap_string($username) . "' WHERE primary_key = " . (int) $row['primary_key'];
}
else
{
    // Record doesn't exist, insert
    $q = "INSERT INTO my_table(username, email) VALUES('" . mysql_real_escape_string($username) . "', '" . mysql_real_escape_string($email) . "');";
}

Yukarıdaki örnekte ben bir tamsayı (primary_key) olan bir birincil anahtar alanı var sayıyorum.