php / MySQL 'id' olsun o satırı eklemek

5 Cevap php

benim masa oto 'id' alanı bir satır eklediğinizde, ben bir satır eklemek ve daha sonra bu kimliği almak istiyorum artar.

Bunu dedi ama ben satır ekleme ve id almak arasındaki zaman önemsemeden bunu bir yolu olup olmadığını merak ediyorum sadece ben bunu yapardı.

Ben girilen bilgilerle eşleşen satır için veritabanını sorgulayabilirsiniz biliyorum, ama tek fark id olmak çoğaltmaları olacak bir yüksek değişim vardır.

5 Cevap

MySQL fonksiyonu LAST_INSERT_ID() does just what you need: it retrieves the id that was inserted during this session. Yani aynı tabloya değerleri ekleme diğer işlemler (diğer insanlar, örneğin, aynı dosyası arayarak) olsa bile, kullanımı güvenlidir.

Php function mysql_insert_id() does the same as calling SELECT LAST_INSERT_ID() mysql_query() ile.

PHP'nin web sitesine gelince, mysql_insert_id artık önerilmemektedir ve PDO kullanmanız gerekir. PDO ile bunu yapmak için, aşağıdaki işlemleri uygulayın:

$db = new PDO('mysql:dbname=database;host=localhost', 'user', 'pass');
$statement = $this->db->prepare('INSERT INTO people(name, city) VALUES(:name, :city)');
$statement->execute( array(':name' => 'Bob', ':city' => 'Montreal') );

echo $db->lastInsertId();

Ben sadece lastInsertId() ile ilgili küçük bir ayrıntı eklemek istiyorum;

When entering more than one row at the time, it does not return the last Id, ancak son ekler koleksiyonun ilk Id.

Aşağıdaki örneği inceleyin

$sql = 'INSERT INTO my_table (varNumb,userid) VALUES
     (1, :userid),
     (2, :userid)';
$sql->addNewNames = $db->prepare($sql);
addNewNames->execute(array(':userid' => $userid));

echo $db->lastInsertId();

Burada ne olur ben my_table iki yeni satır itin olmasıdır. Tablonun id otomatik artıştır. Burada, aynı kullanıcı için, ben farklı bir varNumb ile iki satır ekleyin.

Sonunda yankılandı katma değer değildi last satırın id, ancak ilk satırın id anlamına varNumb=1 satırın id, eşit olacak son isteği.

@ NaturalBornCamper bahsedilen gibi, mysql_insert_id is now deprecated ve not kullanılmalıdır. Seçenekler PDO veya mysqli ya da kullanmak için şimdi. NaturalBornCamper onun cevabını PDO'yu açıkladı, bu yüzden MySQLi (MySQL Improved) kullanılarak mysqli_insert_id ile bunu nasıl göstereceğim.

// First, connect to your database with the usual info...
$db = new mysqli($hostname, $username, $password, $databaseName);
// Let's assume we have a table called 'people' which has a column
// called 'people_id' which is the PK and is auto-incremented...
$db->query("INSERT INTO people (people_name) VALUES ('Mr. X')");
// We've now entered in a new row, which has automatically been 
// given a new people_id. We can get it simply with:
$lastInsertedPeopleId = $db->insert_id;
// OR
$lastInsertedPeopleId = mysqli_insert_id($db);

Daha fazla örnek için PHP belgelerine göz atın: http://php.net/manual/en/mysqli.insert-id.php