php:mysql_insert_id()问题

时间:2010-09-06 20:01:14

标签: php mysql mysql-insert-id

在mysql db中处理INSERT查询后,php函数mysql_insert_id()是否可以返回结果?

只是澄清一下。 cron在生产网站上执行了一个脚本。它包含一个为用户生成发票的周期。每次迭代都包含一个INSERT数据库查询和在查询后立即执行的mysql_insert_id()操作 - 以获取生成的发票号。在不获取最后插入的数字的情况下执行了一组迭代。

它可能是由高数据库服务器负载引起的,还是由于与PHP代码站点上的问题没有关联的其他原因引起的?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

随便,我可以想到一些MySQL不会返回ID的情况:

  • 您要插入的表格没有AUTO_INCREMENT ed主键。
  • 您一次插入多行。
  • 您从与执行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。

答案 1 :(得分:0)

如果您通过shell脚本运行命令,并按照;

单独运行它们

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命令所需的额外参数来删除格式和标题行 - 我担心我无法忘记它们!#/ p>