下面这个自定义insert_id()函数,所有中国PHP程序员都奉行真理一般在自己的数据库操作函数类中使用。殊不知它是一个完全错误的函数,也许有一天你的应用莫名其妙的出错而你又苦找寻不错程序的任何错误时,那有可能就是你对这个错误的无知。说“中国PHP程序员都犯的一个错误”可能是夸张了点,但我至今看到所有的PHP开源应用中都是原版使用下面的函数。function insert_id() {
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}先说一下大家一直认为的此函数执行:
mysql_insert_id函数只能正确返回INT型,当遇到BIGINT型就会返回错误数据(大家误认为此时会返回小于0的错误数据)。$id = mysql_insert_id($this->link)) >= 0此函数这么写的期望是:当最新插入的记录ID是BIGINT型时会返回小于0的值。此时,期望函数会执行$this->result($this->query("SELECT last_insert_id()"), 0),返回正确的BIGINT型记录ID。错误就出现在大家对$id = mysql_insert_id($this->link)) >= 0的错误认识。它永远都不会像大家期望的那样“当最新插入的记录ID是BIGINT型时会返回小于0的值”,所以此函数永远也不会执行$this->result($this->query("SELECT last_insert_id()"), 0)语句,永远也不会在新插入的记录ID是BIGINT型时返回正确的ID给你。我光这么说,也许大家会不信,那我就告诉大家一个简单的验证方法:找一个你设置有auto_increment字段的表,使用ALTER TABLE `你的表名` AUTO_INCREMENT = 8030558188959576064(一个BIGINT型数字),接下来就不用说了,写段小程序向表中插入记录,调用上面insert_id自定义函数,此时你就能看到我所描述的是正确的。解决办法:直接把此函数调整成如下所示:function insert_id()
{
return $this->result($this->query("SELECT last_insert_id()"), 0);
}请大家支持我的知识和劳动,转载时请不要删除原创地址。原创:http://www.goupaiba.com/thread-2233-1-1.html(若你无权发带连接内容删除此行)原创:goupaiba.com/thread-2233-1-1.html
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}先说一下大家一直认为的此函数执行:
mysql_insert_id函数只能正确返回INT型,当遇到BIGINT型就会返回错误数据(大家误认为此时会返回小于0的错误数据)。$id = mysql_insert_id($this->link)) >= 0此函数这么写的期望是:当最新插入的记录ID是BIGINT型时会返回小于0的值。此时,期望函数会执行$this->result($this->query("SELECT last_insert_id()"), 0),返回正确的BIGINT型记录ID。错误就出现在大家对$id = mysql_insert_id($this->link)) >= 0的错误认识。它永远都不会像大家期望的那样“当最新插入的记录ID是BIGINT型时会返回小于0的值”,所以此函数永远也不会执行$this->result($this->query("SELECT last_insert_id()"), 0)语句,永远也不会在新插入的记录ID是BIGINT型时返回正确的ID给你。我光这么说,也许大家会不信,那我就告诉大家一个简单的验证方法:找一个你设置有auto_increment字段的表,使用ALTER TABLE `你的表名` AUTO_INCREMENT = 8030558188959576064(一个BIGINT型数字),接下来就不用说了,写段小程序向表中插入记录,调用上面insert_id自定义函数,此时你就能看到我所描述的是正确的。解决办法:直接把此函数调整成如下所示:function insert_id()
{
return $this->result($this->query("SELECT last_insert_id()"), 0);
}请大家支持我的知识和劳动,转载时请不要删除原创地址。原创:http://www.goupaiba.com/thread-2233-1-1.html(若你无权发带连接内容删除此行)原创:goupaiba.com/thread-2233-1-1.html
解决方案 »
- PHP可以从一个服务器向另外一个服务器传递表单么
- 在相等,var_dump($val)长度和看见的不一样
- 刚毕业,上班遇到的问题,感觉很火 ...
- Mysql导入问题
- PHP中的$$是什么意思?
- 菜鸟的问题!
- 我用js检验我在表单中输入的值为什么检验
- 誰能提点改进的建议,使这个程序的运行速度快一点?谢谢!我暂时没分给了,先帮着,以后再给吧!
- ▓▓▓▓▓▓▓▓▓▓PHP与JSP那个更好?▓▓▓▓▓▓▓▓▓▓一定给分!!!!!!!!
- PHP think框架问题,下载后直接运行就报错
- 非程序员求教,PHP的各种框架和WordPress、Drupal是什么关系?
- PHP网页设计--做个网站真难啊。(不能说难,准确说繁)
得到一个结论:我不是中国的php程序员