博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php的mysql_insert_id()返回值问题
阅读量:7244 次
发布时间:2019-06-29

本文共 1262 字,大约阅读时间需要 4 分钟。

最近使用zencart的时候, 碰到了mysql_insert_id()返回值为0的情况,亲自实践了一下,弄明白了上一个连接的含义.

 

1. 先看mysql_insert_id()参数为空的情况

1) 连库1--insert1; 连库2--insert2.

执行结果: 两次mysql_insert_id都正确返回了增加的AUTO_INCREMENT值. 符合预期.

2) 连库1--连库2--查询1--查询2

执行结果: 第一次mysql_insert_id返回0, 第二次正确返回增加的AUTO_INCREMENT值.   不符合预期.

3) 连库--insert1--selct1

执行结果: mysql_insert_id返回0. 不符合预期.

4) 连库--insert1--update1/delete1/insert2

代码略.

执行结果: mysql_insert_id没有返回insert1的AUTO_INCREMENT值. 不符合预期.

2. mysql_insert_id()参数中指明数据库的句柄.

1) 连库1--insert1; 连库2--insert2.

代码略.
执行结果: 两次mysql_insert_id都正确返回了增加的AUTO_INCREMENT值. 符合预期.
2) 连库1--连库2--查询1--查询2
代码略.
执行结果: 两次mysql_insert_id都正确返回了增加的AUTO_INCREMENT值. 符合预期.
3) 连库--insert1--selct1
代码略.
执行结果: mysql_insert_id返回0. 不符合预期.
4) 连库--insert1--update1/delete1/insert2
代码略.
执行结果: mysql_insert_id没有返回insert1的AUTO_INCREMENT值. 不符合预期.

 

3. 总结.

1) 单数据库连接时, mysql_insert_id()需要紧跟在insert执行语句后面, 否则得不到预期的值, 和是否带有参数无关.

2) 多数据库连接时:

    a) mysql_insert_id()不带参数: 默认的数据库连接是最后一次mysql_connect的那个数据库连接.

    如果按照连库1--insert1... 连库n--insert n ,这样的顺序执行的话 ,可以得到预期值. 

    否则mysql_insert_id()会使用最后一次mysql_connect的数据库句柄.

    在现在复杂的业务需求里面, 很难保证顺序执行.

    b) mysql_insert_id($db)带参数. 

    遵循1)中的结论.

    演变为单数据库连接模式.

另外, mysql_insert_id()只能返回AUTO_INCREMENT值.

 

详细的mysql_insert_id原理可以参考下面的链接: 

lastInsertId只返回AUTO_INCREMENT值: 

转载地址:http://zqybm.baihongyu.com/

你可能感兴趣的文章
第一百二十三节,JavaScript错误处理与调试
查看>>
WebAssembly,可以作为任何编程语言的编译目标,使应用程序可以运行在浏览器或其它代理中——浏览器里运行其他语言的程序?...
查看>>
【公告】博客数据异常已所有恢复
查看>>
JavaScript 刚開始学习的人应知的 24 条最佳实践
查看>>
java中finalkeyword
查看>>
.net core中使用Type.GetType()从字符串获取类型遇到的问题
查看>>
select选中获取索引三种写法
查看>>
词袋模型bow和词向量模型word2vec
查看>>
分享升级架构师路上的体会,兼说我为什么有挣钱紧迫感
查看>>
浏览器 HTTP 协议缓存机制详解
查看>>
understand软件使用教程(转)
查看>>
【JavaScript】 JS面向对象的模式与实践
查看>>
13.ng-value
查看>>
8天掌握EF的Code First开发系列之动手写第一个Code First应用
查看>>
【Django】 积累
查看>>
iOS App的加固保护原理
查看>>
测试左移和测试右移
查看>>
云开发初探 —— 更简便的小程序开发模式
查看>>
CSharpGL(49)试水OpenGL软实现
查看>>
Centos7安装Tomcat并部署DubboAdmin的War包并配置自动启动
查看>>