MySQL+PHP: получение last_id of multiple/composite primary key

Мне нужно получить последний вставленный id таблицы, которая имеет многостолбцовые первичные ключи.

  • Эти таблицы не имеют колонки AUTOCOUNT.
  • Я использую параметризованные запросы (произвольного порядка)
  • Используя PHP (5.3) и MySQLi модуль
  • Arbitrary INSERT SQL Query. (в любом формате)

Например:

Table: foo
Primary key: [ group_id , user_id ]
Query: INSERT INTO foo (group_id, user_id, name, email) VALUES (?, ?, ?, ?);
Parameters: array(34,15,"John","john@example.com")

Результат: $last_id = $mysqli->insert_id ?: getInsertedId();

34,15

В данный момент у меня есть функция с именем getPK(), которая возвращает мне:

array("group_id","user_id");

Теперь мне нужно реализовать getInsertedId(). Какой же простой способ сделать это без использования SQL парсера?

Я уверен, что ответ на этот вопрос уже есть, но я не смог найти ничего.....

UPDATE

Причина, по которой я задаю этот вопрос, заключается в том, что у меня есть класс, который контролирует все, что связано с базой данных MySQL (часть персонального фреймворка). У меня есть один метод, который называется set(), в котором передаются запросы (например, UPDATE, INSERT, DELETE и т.д.). У меня есть и другие специфические методы, такие как insert(), в которых передаются массивы.

У меня есть переменная, в которой я храню last_inserted_id. Эта переменная может быть вызвана в любое время позже. У меня есть много таблиц в разных системах, которые имеют несколько первичных ключей. При использовании метода insert() у меня нет проблем с установкой значения last_inserted_id, но когда некоторые системы используют метод set(), я не могу получить это значение и должен вернуть 0. Я хотел бы изменить это поведение.

Я хотел бы упростить свое объяснение приведенным выше примером.

UPDATE 2

Не все системы управляются мной. Например, одна из систем вызывает мыльный метод, в котором посылается запрос на выполнение (любой запрос). Они обрабатываются методом set(). Затем существует другой мыльный метод, в котором извлекается последний идентификатор. Для согласованности я хотел бы вернуть это значение.

5
задан lepe 25 August 2011 в 09:29
поделиться