2010-09-06 4 views
3

Может ли функция php mysql_insert_id() не возвращать результат после обработки запроса INSERT в mysql db?php: mysql_insert_id() issues

Просто уточнить. Был сценарий, выполняемый cron на производственной площадке. Он содержит цикл для создания счетов-фактур для пользователей. Каждая итерация состоит из запроса db INSERT и операции mysql_insert_id(), идущей сразу после запроса, - для извлечения сгенерированного номера счета. Набор итераций выполнялся без извлечения последнего вставленного числа.

Возможно, это связано с загрузкой сервера с высоким db или по каким-либо другим причинам, которые не связаны с проблемой на сайте php-кода?

Любая помощь будет оценена!

ответ

3

Навскидку, я могу думать о нескольких случаях, когда MySQL не будет возвращать идентификатор:

  • В таблице вы вставку в не имеет AUTO_INCREMENT эд первичный ключ.
  • Вы вставляете сразу несколько строк.
  • Вы вызываете mysql_insert_id() из другого соединения, кроме запроса INSERT.
  • Запрос INSERT не удался (например, он столкнулся с тупиком). Убедитесь, что вы проверяете возвращаемое значение от mysql_query(), затем используйте mysql_errno() и mysql_error().

Документы MySQL имеют a full list of conditions and details on how this function works.

Конечно, возможно также, что в MySQL существует ошибка, которая будет зависеть от той версии MySQL, которую вы используете.

0

Если вы используете команды через сценарий оболочки и запускаете их как отдельно, так и внутри;


mysql -e "insert into table (field1) values ('val1');" "database" 

lastId=`mysql -e "select last_insert_id();" "database"` 

Тогда это не сработает, так как второй вызов делает новое подключение к серверу. Вам нужно сделать что-то вроде следующего, поскольку все это делается в рамках одного вызова/соединения с базой данных;


lastId=`mysql -e " 
        insert into table (field1) values ('val1'); 
        select last_insert_id(); 
       " "database"` 

Вам нужно будет искать дополнительные параметры, необходимые для команды MySQL, чтобы удалить форматирование и заголовок строки - Я боюсь, что я не могу вспомнить их с верхней части моей головы!

+0

не из сценария оболочки действительно, из php-скрипта, выполненного cron –