Множественная вставка MySqli, использующая тот же ID [дубликат]

Статический метод - это метод, который ничего не знает о классе или экземпляре, на который он был вызван. Он просто получает аргументы, которые были переданы, не подразумевается первый аргумент. Это в основном бесполезно в Python - вы можете просто использовать функцию модуля вместо staticmethod.

С другой стороны, метод класса - это метод, который получает переданный класс, на который он был вызван, или класс экземпляра, на который он был вызван, в качестве первого аргумента. Это полезно, если вы хотите, чтобы этот метод был фабрикой для класса: поскольку он получает фактический класс, который он вызывал в качестве первого аргумента, вы всегда можете создать экземпляр правильного класса, даже если задействованы подклассы. Обратите внимание, например, как dict.fromkeys(), classmethod, возвращает экземпляр подкласса при вызове в подклассе:

>>> class DictSubclass(dict):
...     def __repr__(self):
...         return "DictSubclass"
... 
>>> dict.fromkeys("abc")
{'a': None, 'c': None, 'b': None}
>>> DictSubclass.fromkeys("abc")
DictSubclass
>>> 
12
задан Mumbo Jumbo 11 March 2013 в 08:12
поделиться

3 ответа

mysqli_insert_id не возвращает идентификатор последней строки таблицы. Из docs , it:

... возвращает идентификатор, сгенерированный запросом в таблице со столбцом, имеющим атрибут AUTO_INCREMENT. Если последний запрос не был оператором INSERT или UPDATE или если в измененной таблице нет столбца с атрибутом AUTO_INCREMENT, эта функция будет возвращать ноль.

(Мой акцент)

То есть, если вы должны немедленно запустить после вставку, которая автоматически сгенерировала идентификатор, в том же соединении вы сделал вставку с, он вернет идентификатор, сгенерированный для этой вставки.

Это иллюстрируется примером в документах, связанных выше:

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);
19
ответ дан T.J. Crowder 1 September 2018 в 08:27
поделиться

Для других людей, приезжающих сюда, возможно, вы попробовали INSERT IGNORE INTO, и у вас есть значение UNIQUE, которое уже было вставлено. В этом случае этот id равен нулю.

Также вы получите «ноль», если MySQL закончит соединение. Я не эксперт в отношении постоянных подключений, но это может помочь кому-то?

Как вы, вероятно, знаете, что расширение PHP «mysql» поддерживает постоянные соединения, но они были отключены в новом расширении «mysqli» - Peter Zaitsev

0
ответ дан PJ Brunet 1 September 2018 в 08:27
поделиться

Чтобы получить результат, вы должны поместить

$last_row = mysqli_insert_id($connection);

после запроса INSERT

14
ответ дан Sudip Pal 1 September 2018 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: