Как да получа идентификатор на нововмъкнат запис в MySQL, Mysql

Вътрешен човек

INSERT INTO pr_project_command (id_project, id_user, id_command_role) СТОЙНОСТИ (1, 1, 2)

В MsSQL бих могъл да получа нещо като @@ IDENTITY, което ще напише стойността на ID на полето за автоматично увеличаване, зададено при добавяне на записа.

Как да направите заявка за добавяне на нов запис в MySQL, върнете незабавно идентификатора?

rdm

Изберете mysql_insert_id () от таблицата

Вътрешен човек

Хм. Близо, но не разбирам съвсем - нали.
Възможна е ситуация (особено за системи за фактуриране), когато
между изпълнението на командата INSERT към table1 и SELECT LAST_INSERT_ID () FROM table1 за вмъкване на ID в Table2
системата може да вмъкне повече записи в table1, след това ще се върне грешното нещо ... = (

Вътрешен човек

В момента
Таблица1 съдържа

Id autoinc int (20) първичен
Име уникален varchar (120)

Така че проблемът се решава недвусмислено чрез изпълнение на заявка SELECT в полето Name (тъй като върху него е изграден уникален индекс) и след това чрез изпълнение на втория INSERT в свързаната таблица с получения ID. Това обаче е досадно. В MsSQL всичко е много по-просто ... Е, има StoredProcedures ...
Представете си колко SELECT-INSERT трябва да бъдат изпълнени, за да вмъкнете запис в поне 10 свързани таблици.

ise-dvp

функция ExecSQL ($ sql, $ newRow = 0) < // Только изменяющие запросы
// За INSERT в $ newRow връща auto_increment
// $ newRow се предава на функцията чрез препратка

глобална $ база данни, $ DBID;

if (! Empty ($ sql. $ Result = mysql_query ($ sql, $ DBID) или die (msgboxdberror ($ sql .;
$ newRow = mysql_insert_id ($ DBID);
връщане на mysql_affected_rows ($ DBID);
>
>

$ sql = 'вмъкване в стойностите на потребителите (вход, парола) ("newuser", md5 ("password & quot.';
$ ChangeRow = ExecSQL ($ sql, & $ newRow);

Вътрешен човек

mysql_insert_id () преобразува типа стойност, върнат от MySQL C API функцията mysql_insert_id (), в дълъг int (наречен int в PHP). Ако вашата колона AUTO_INCREMENT е BIGINT, стойността, върната от mysql_insert_id (), ще бъде изкривена. Вместо това използвайте функцията SQL LAST_INSERT_ID ().

Id autoinc int (20) първичен (int (20) == BIGINT)