Статический метод - это метод, который ничего не знает о классе или экземпляре, на который он был вызван. Он просто получает аргументы, которые были переданы, не подразумевается первый аргумент. Это в основном бесполезно в 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
>>>
mysqli_insert_id
не возвращает идентификатор последней строки таблицы. Из docs , it:
... возвращает идентификатор, сгенерированный запросом в таблице со столбцом, имеющим атрибут AUTO_INCREMENT. Если последний запрос не был оператором
blockquote>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);
Для других людей, приезжающих сюда, возможно, вы попробовали INSERT IGNORE INTO
, и у вас есть значение UNIQUE
, которое уже было вставлено. В этом случае этот id равен нулю.
Также вы получите «ноль», если MySQL закончит соединение. Я не эксперт в отношении постоянных подключений, но это может помочь кому-то?
Как вы, вероятно, знаете, что расширение PHP «mysql» поддерживает постоянные соединения, но они были отключены в новом расширении «mysqli» - Peter Zaitsev
blockquote>
Чтобы получить результат, вы должны поместить
$last_row = mysqli_insert_id($connection);
после запроса INSERT