Как я получил бы последний вставленный идентификатор с помощью многострочной вставки? Вот мой код:
$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 для получения следующего идентификатора вставки перед вставкой?
спасибо
Я полагаю, что тип, используемый для общего класса, зависит от конкретной сборки (как и большинство классов .NET), поэтому я не думаю, что вы получите что-либо еще без создания этой последовательности вручную путем отражения или анализа последовательности.
OTOH я не думаю, что использование имен типов в качестве ключей является хорошей идеей, может, вам стоит подумать о получении какого-то другого ключа (но я не знаю требований, поэтому я не могу рекомендовать что-то другое)
-121--2964801-Конечно:
try {
throw new Exception('Something bad');
} catch (Exception $e) {
// Do nothing
}
Вы можете прочитать документацию PHP по исключениям .
-121--947686-$lastId=$contactsTable->getAdapter()->lastInsertId();
Это сработало.
Итак, вот полный рабочий код, который я использую для создания многорядной вставки, получение добавленных строк и последнего вставленного ID:
$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;
Этот код должен работать, но он только заметят идентификатор вашей последней вставки.
Вы можете получить следующий автоинкремент с этим запросом MySQL:
SELECT Auto_increment FROM information_schema.tables WHERE TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME='the_table_you_want';