mysql的bigint类型与php的mysql_insert_id函数造成的bug

33 篇文章 0 订阅

discuz做二次开发,有个bug让我头疼了2天。

由于数据的需要把post表中的pid改为bigint(20)

可是用$db->insert_id()取出来的不是刚刚插入的pid值,导致附件找不到对应的帖子

 

找了2天原因,后来在php手册看到:

 

mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。

 

于是将db类里的 insert_id 做以下修改

 

<?php
function insert_id() {
        //return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
        return $this->result($this->query("SELECT last_insert_id()"), 0);   //在bigint下使用这个语句,mysql手册中说SELECT last_insert_id()是多用户安全的
    }
?> 

问题解决

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值