php函数mysql_insert_id()可以在mysql db中处理INSERT查询后不返回结果吗?
只是为了澄清。生产站点上有一个由 cron 执行的脚本。它包含一个为用户生成发票的循环。每次迭代都包含一个 INSERT db 查询和查询之后的 mysql_insert_id() 操作 - 以获取生成的发票编号。在没有获取最后插入的数字的情况下执行了一组迭代。
它可能是由高数据库服务器负载或其他与php代码站点问题无关的原因引起的吗?
任何帮助,将不胜感激!
php函数mysql_insert_id()可以在mysql db中处理INSERT查询后不返回结果吗?
只是为了澄清。生产站点上有一个由 cron 执行的脚本。它包含一个为用户生成发票的循环。每次迭代都包含一个 INSERT db 查询和查询之后的 mysql_insert_id() 操作 - 以获取生成的发票编号。在没有获取最后插入的数字的情况下执行了一组迭代。
它可能是由高数据库服务器负载或其他与php代码站点问题无关的原因引起的吗?
任何帮助,将不胜感激!
顺便说一下,我可以想到 MySQL 不会返回 ID 的几种情况:
AUTO_INCREMENT
ed 主键。mysql_insert_id()
不同的连接调用。INSERT
INSERT
查询没有成功(例如,它遇到了死锁)。确保您正在检查来自 的返回值mysql_query()
,然后使用mysql_errno()
and mysql_error()
。MySQL 文档有一个完整的条件列表和关于这个函数如何工作的细节。
当然,也有可能 MySQL 中存在错误,这取决于您使用的 MySQL 版本。
如果您通过 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 命令所需的额外参数以删除格式和标题行 - 恐怕我不记得它们了!