Zend Framework получает идентификатор последней вставки многострочной вставки, используя execute - PullRequest
5 голосов
/ 19 января 2010

Как мне получить последний вставленный идентификатор, используя многорядную вставку?Вот мой код:

$sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example
$stmt = $contactsTable->getAdapter()->prepare($sql);
$stmt->execute(); 
$rowsAdded=$stmt->rowCount(); // mysql_affected_rows
$lastId=$stmt->lastInsertId();
echo '<br>Last ID: '.$lastId;

Кроме того, есть ли в ZF метод для получения следующего идентификатора вставки перед вставкой?

спасибо

Ответы [ 4 ]

10 голосов
/ 25 января 2010
$lastId=$contactsTable->getAdapter()->lastInsertId();

Это сработало.

3 голосов
/ 19 января 2010

Итак, вот полный рабочий код, который я использую для создания многорядной вставки, получения добавленных строк и последнего вставленного идентификатора:

$contactsTable = new Contacts_Model_Contacts();
$sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example
$stmt = $contactsTable->getAdapter()->prepare($sql);
$stmt->execute(); 
$rowsAdded=$stmt->rowCount(); // mysql_affected_rows
$lastId=$contactsTable->getAdapter()->lastInsertId(); // last inserted id
echo '<br>Last ID: '.$lastId;
2 голосов
/ 05 июня 2012

Альтернативное решение.Переместите SQL-код с контроллеров и поместите их в модели.Вот для чего они нужны.

Если вы используете модели, вы можете указать имя таблицы, в которой есть столбец автоинкремента, в переменной класса.

protected $_name="<table_name>"; 

Затем в классе вашей моделиметод, вы можете получить последний идентификатор вставки из

$insertID= $this->getAdapter()->lastInsertId();
0 голосов
/ 19 января 2010

этот код должен работать, но он даст вам только идентификатор вашей последней вставки.

Вы можете получить следующий автоинкремент с помощью этого запроса MySQL:

SELECT Auto_increment FROM information_schema.tables WHERE TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME='the_table_you_want';
...