Bir kere takın, ancak iki kayıtları MySQL yarattı

5 Cevap php
for($i = 1 ; $i <= 3; $i++)
{
    if(!empty($_POST['fl' . $i]))
    {
    	$dml = "insert into flAptitude(accountId,language,qualification,certificate) value($accountId,'" . $_POST['fl' . $i] . "','" . $_POST['qualification' . $i] . "','" . $_POST['certificate' . $i] . "')";
    	mysql_query($dml,$con);
    	file_put_contents("fl$i.txt",$dml);
    }
}

Ve sadece fl1.txt yarattı, kimin içeriği vardır:

insert into flAptitude(accountId,language,qualification,certificate) value(1,'Germany','Excellent',NULL)

Peki, hangi koşullarda MySQL 1 "insert" ifadesi için 2 rekor üretecektir?

EDIT Here is the table definition:

mysql> show create table flAptitude\G
*************************** 1. row ***************************
       Table: flAptitude
Create Table: CREATE TABLE `flaptitude` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `accountId` int(10) unsigned default NULL,
  `language` varchar(15) NOT NULL,
  `qualification` int(10) unsigned default NULL,
  `certificate` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

O = 3 AUTO_INCREMENT ile ilgisi var mı? Bu ne demek?

5 Cevap

Occam'ın Razor muhtemelen bir dış döngü ile iki kez bu şey aracılığıyla döngüye ettik söylüyor. Eğer sonuç çoğaltma edildi masaya hatalı biçimlendirilmiş bir tetikleyicisi vardı, bu da oluşabilir. Bunun dışında, biz bu kod yaptığını ne kadar daha iyi bir fikir almak için koştu önce ve sonra select * from flAptitude ne görmem gerekiyor.

AUTO_INCREMENT=3 sadece değiştirmemesi sütun yerine varsayılan 1 3 başlar demektir.

Ayrıca, bir ACID veritabanı motoru InnoDB, kullanıyoruz. Bu kodunuzu iki kez ekinizi aradığınız anlamına gelir, sadece nerede olduğunu bulmak gerekiyor.

Bu bir php sorunu değil, MySQL ile bir sorundur. Sorun file_put_contents() dosyanın içeriğini yazar olduğunu. Lütfen döngü (iki döngüler) olur Bu nedenle, günlük yalnızca last kayıt eklendiğinde vardır.

Bu deneyin:

$file = "fl{$i}.txt";
$current = file_get_contents($file);
$current .= $dml . "\n";
file_put_contents($file, $current);

Ilgili daha fazla bilgi file_put_contents() here.

Sorunuzun son bölümünü yanıtlamak için, hayır bu durumda 3 başlayarak, bir attribute to auto-id new rows olduğunu AUTO_INCREMENT ile ilgisi yoktur

Ben bu sorun benim başlık açıklamasının ardından bir exit(); koyarak çözülecek bulundu;

  $sql = "INSERT INTO airline SET
            company         = '$company',
            name            = '$name',
            address1        = '$address1',
            address2        = '$address2',
            city            = '$city',
            st              = '$st',
            zip             = '$zip',
            ph1             = '$ph1',
            ph2             = '$ph2',
            fax             = '$fax',
            email           = '$email',
            web             = '$web',
            date            = '$date'";

  if (!mysql_query($sql)) {
    mysql_close();
    die("<p><b>Record Not Added </b><br />" . mysql_error() . "</p>");
  }
  else {
    mysql_close();
    $goto = "Location: $php_self";
    header($goto);
    exit();
  }

Ben Atlandiginda exit();, kod aynı veri 2 kayıt eklemek, ancak kimlikleri artan olacaktır. Çıkış ekleme script sadece bir kez yazılabilir yaptı.

Siz 2009 yılında sorularınıza yazdı ama belki benim cevap başkaları için faydalı olacaktır ...

Ben aynı sorunu vardı. Benim durumumda bu FirePHP oldu. Add-on krom / firefox için. Benim komut katına O (neden bilmiyorum). Uzantıları her şeyi olmadan öğle tarayıcı Tamam iken.