sql >> Database teknologi >  >> RDS >> Mysql

PHP/MySQL indsæt række og få 'id'

$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);

Se mysqli_insert_id() .

Uanset hvad du gør, skal du ikke indsætte og derefter lave en "SELECT MAX(id) FROM mytable ". Som du siger, det er en racetilstand, og der er ikke behov for det. mysqli_insert_id() har allerede denne funktionalitet.

En anden måde ville være at køre begge forespørgsler på én gang og bruge MySQL 's LAST_INSERT_ID() metode, hvor begge tabeller bliver ændret på én gang (og PHP behøver ikke noget ID), som:

mysqli_query($link, "INSERT INTO my_user_table ...;
  INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");

Bemærk at hver forbindelse holder styr på ID separat (så konflikter er allerede forhindret).



  1. Find det sidste indeks af en streng i Oracle

  2. Sådan genereres testdata i SQL Server

  3. Er der nogen måde at få JBoss-forbindelsespuljen til at oprette forbindelse til Oracle igen, når forbindelserne går dårlige?

  4. bestil efter newid() - hvordan virker det?