MySql ve bir bağlantı tablo ekleme veri, nasıl?

2 Cevap php

Eklemeler thtree PHP yazmak ve biz düzgün tabloları bağlamak emin olmak için MySQL (Version 4) de hile nedir.

[Table1]-[LinkTable]-[Table2]

PHP kodu I tablo 1 ve tablo 2'de başka bir satır eklemek başka bir takma, 1 satır eklemek bir Ek oluşturun. Bana her tabloları son satır dönmek iki SELECTleri hem satırlar PK (birincil anahtar) olsun. Ben, Tablo 1 ve Tablo 2 PK (otomatik artış) almak ve bağlantı masaya yerleştirin Bu şekilde.

Sorun şu ki, şimdi ben düzgün bağlantı vermiyor işlem bir şey bir sürü almak atomik değil dir.

Nasıl verileri korumak MySQL 4 2 tablolar arasında bir bağlantı yapabilirsiniz? Ben herhangi bir stoklanmış yordamı kullanamazsınız.

2 Cevap

Sorununuz burada:

Bana her tablo son satır dönmek seçer.

Eğer böyle bir şey yaptıysa: MAX (id) SELECT table sizin işlem için yanlış bir kimliği alabilirsiniz.

Bu ortak bir çok-çok ilişki

BaileyP fonksiyon mysql_insert_id kullanmak gerektiğini söylüyorlar olarak ().

de http://ar2.php.net/mysql_insert_id

okuyabilir

Önceki INSERT sorgusu tarafından bir Otomatik artma sütun için oluşturulan kimliğini alır.

diğer süreç aynı tabloda, bir satır eklemek eğer öyleyse umursamıyorum. her zaman geçerli bağlantı için son id alacak.

Peki, (yerine MyISAM arasında) InnoDB tabloları kullanma yeteneği varsa o hareketleri kullanabilirsiniz. İşte bazı kaba kod

<?php

//  Start a transaction
mysql_query( 'begin' );

//  Execute the queries
if ( mysql_query( "insert into table_one (col1, col2) values('hello','world')" ) )
{
    $pk1 = mysql_insert_id();
    if ( mysql_query( "insert into table_two (col1, col2) values('foo', 'bar')" ) )
    {
    	$pk2 = mysql_insert_id();
    	$success = mysql_query( "insert into link_table (fk1, fk2) values($pk1, $pk2)" );
    }
}

//  Complete the transaction
if ( $success )
{
    mysql_query( 'commit' );
} else {
    mysql_query( 'rollback' );
}

Eğer InnoDB tabloları kullanabilirsiniz yapamıyorsanız o zaman Unit Of Work kalıbı içine bakarak öneririz.