3

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

只是为了澄清。生产站点上有一个由 cron 执行的脚本。它包含一个为用户生成发票的循环。每次迭代都包含一个 INSERT db 查询和查询之后的 mysql_insert_id() 操作 - 以获取生成的发票编号。在没有获取最后插入的数字的情况下执行了一组迭代。

它可能是由高数据库服务器负载或其他与php代码站点问题无关的原因引起的吗?

任何帮助,将不胜感激!

4

2 回答 2

3

顺便说一下,我可以想到 MySQL 不会返回 ID 的几种情况:

  • 您要插入的表没有AUTO_INCREMENTed 主键。
  • 您一次插入多行。
  • 您从与执行查询mysql_insert_id()不同的连接调用。INSERT
  • INSERT查询没有成功(例如,它遇到了死锁)。确保您正在检查来自 的返回值mysql_query(),然后使用mysql_errno()and mysql_error()

MySQL 文档有一个完整的条件列表和关于这个函数如何工作的细节

当然,也有可能 MySQL 中存在错误,这取决于您使用的 MySQL 版本。

于 2010-09-06T20:11:28.700 回答
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 命令所需的额外参数以删除格式和标题行 - 恐怕我不记得它们了!

于 2010-09-06T20:23:03.037 回答