php mysql insert 返回_php的mysql_insert_id()返回值问题

最近使用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原理可以参考下面的链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值