中国PHP程序员都犯的一个错误:使用错误的自定义insert_id函数
来源:互联网 发布:mac键盘皮肤带按键音 编辑:程序博客网 时间:2024/05/18 01:46
下面这个自定义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
- 中国PHP程序员都犯的一个错误:使用错误的自定义insert_id函数
- php程序员使用jquery的if判断易犯的一个错误总结
- 使用默认构造函数一个易犯的错误
- 每个程序员都可能犯过的10个错误
- 每个程序员都可能犯过的10个错误
- 每个程序员都可能犯过的10个错误
- 每个程序员都可能犯过的10个错误
- 每个程序员都可能犯过的十个错误
- 每个程序员都可能犯过的10个错误
- 使用 libevent 容易犯的一个错误
- 使用webpack犯过的一个错误
- 一直以来都犯的错误,使用include_once而不是include
- php学习犯的错误
- PHP程序员经常犯的10种错误
- PHP程序员常犯的11个mysql错误
- 一些PHP程序员常犯的MySQL错误
- PHP 程序员10条最容易犯的错误
- 一个C/C++程序员最容易犯的错误!
- Hadoop 0.20 單機安裝
- 解决没有音频设备与小图标问题
- mips汇编简单实例——一个小计算器
- js 的两种面向对象编程【两个例子】
- C/C++中typedef的用法,告诉你不一样的typedef
- 中国PHP程序员都犯的一个错误:使用错误的自定义insert_id函数
- cuda string library
- Java取得代码所在行号的方法
- 移植yaffs2文件系统到mini2440 嵌入式 yaffs2文件系统的移植
- Python
- pku2138 Travel Games
- Hadoop 程式編譯
- 关键代码段的互斥操作
- 站在大四门口