Как да получа идентификатор на нововмъкнат запис в 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)