php bir pasajı için daha iyi bir yöntem gerekir

1 Cevap

I Poll adında bir veritabanı var ve bu iki tablo yapıları var demek. poll tablo alanlarını pid (auto_inc) sahiptir ve title. choices tablo, pid cid (auto_inc) sahiptir, ve text.

Nasıl poll tablosuna bir değer eklemek ve aynı zamanda pid olarak kullanılmak üzere poll tabloda En son girdisinin almak görün pid choices tabloda? Şimdiye kadar bu var:

<?php
$sql = "INSERT INTO poll (pid, title) VALUES (NULL, 'sometitle')";
if (mysql_query($sql)) {
  // get the latest pid
  $pid = mysql_result(mysql_query("SELECT pid FROM poll ORDER BY pid DESC LIMIT 1"), 0);

  // use the latest pid retrieved to insert to the "choices" table
  $sql = "INSERT INTO choices (cid, pid, text) VALUES (NULL, " . $pid . ", 'sometext')";
  mysql_query($sql);
}
?>

Ben sadece bu daha iyi bir çözüm var ki bir his var.

Teşekkürler!

1 Cevap

Bunu yapmanın iki yolu vardır:

Öncelikle PHP işlevi mysql_insert_id (). (http://www.php.net/mysql_insert_id bakınız). Bu eklenen son auto_increment kimliği dönecektir.

Pratikte bir sorun olmamak gerektiğini ancak bu, çok iyi, çok sayıda işlemez. İkinci yol (ve benim tercih edilen yolu) Bu sorguyu çalıştırmak için:

Select LAST_INSERT_ID() As insert_id

Başka sorguları çalıştırmadan önce bu aramak için emin olun - bu doğrudan ekleme yapar sorgudan sonra çağrılmalıdır. (Etc, daha fazla bilgi için yukarıdaki php.net sayfaya bakınız)

Bunu yapıyoruz geçerli yolu da eşzamanlılık sorunları muzdarip: başkasının aynı zamanda bir anket ekleme gerekirse, karışık olma PIDlerin riski çalıştırın.