`

PHP程序员易错用的mysql_insert_id函数

阅读更多

今天一早在CSDN论坛看帖子的时候,发现这个帖子说得真的不错,下面的评论也挺好的。又给自己长了点知识,不错~呵呵~

  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);
}

sink补充:
  1、其中函数mysql_insert_id() 函数返回上一步 INSERT 操作产生的 ID。
如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() 返回 0。故上面的?:判断是以是否大于0为分界。
  2、last_insert_id 自动返回最后一个 INSERT 或 UPDATE 操作为Auto_Increnment一个发生的值。LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。

最后原作者的最原始链接(呵呵,我们都要学会尊重原创嘛~):http://www.goupaiba.com/thread-2233-1-1.html

分享到:
评论

相关推荐

    黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip

    黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip

    MySQL_C_API.rar_API_mysql_doc_mysql api_mysql c语言

    MySQL的C API是数据库开发中一个重要的组成部分,它允许程序员使用C语言来与MySQL服务器进行交互,执行SQL查询,管理数据库等操作。本资源“MySQL_C_API.rar_API_mysql_doc_mysql api_mysql c语言”包含了关于MySQL ...

    mysql_include.rar_mysql include_mysql_include_mysql_time.h_mysql

    在C++编程中,为了与MySQL数据库进行交互,开发者通常会使用MySQL的C API,这是一个C语言风格的接口,允许程序员用C或C++编写数据库应用程序。"mysql_include.rar"压缩包文件包含了用于C++开发的MySQL头文件,这些...

    mysql.rar_c mysql_c++ mysql_mysql c_window mysql

    首先,我们需要调用`mysql_init()`函数初始化一个`MYSQL`结构体实例,然后使用`mysql_real_connect()`函数连接到服务器。连接参数包括主机名、用户名、密码和数据库名。例如: ```c MYSQL *conn; conn = mysql_init...

    MYSQL_C_API.rar_MYSQL_mysql c++

    以上只是MySQL C API的一部分功能,实际使用中还涉及到更多函数和特性,如游标操作、批处理等。这个详细的注释版文档将有助于开发者更深入地理解和应用这些API,提高开发效率和代码质量。在阅读文档时,应结合实际...

    MySQL_API.rar_MYSQL_mysql api

    MySQL_API是用于与MySQL数据库进行交互的一系列函数和接口,主要供开发者在编程时使用,以便执行SQL查询、管理数据库连接、操作数据等任务。在MySQL的C API中,这些函数提供了与数据库进行低级别通信的能力,使得...

    [整站程序]洛阳知道ASP.NET程序员培训网站源码_0379zd.zip源码ASP.NET网站源码打包下载

    [整站程序]洛阳知道ASP.NET程序员培训网站源码_0379zd.zip源码ASP.NET网站源码打包下载[整站程序]洛阳知道ASP.NET程序员培训网站源码_0379zd.zip源码ASP.NET网站源码打包下载[整站程序]洛阳知道ASP.NET程序员培训...

    程序员个人工作心得___五篇.docx

    程序员个人工作心得___五篇.docx

    程序员羊皮卷_____下载版

    数据库管理系统的使用是多数软件项目的核心,可能包括SQL语言、关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)的基本操作,以及事务处理、索引优化等高级主题。 七、前端技术 对于全栈...

    mysql_test_c++.rar_ c_test.r_MYSQL_api mysql_mysql api_mysql 演示

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而MySQL C API(Application Programming Interface)是为C/C++程序员设计的,用于在C或C++程序中与MySQL服务器进行交互的接口。本项目"mysql_test_c++.rar_ c_...

    CSQL.rar_ CSQL_CSQL_MYSQL改_linux c mysql_linux mysql增删

    5. **SQL语句执行**:C语言通过调用`mysql_query()`函数执行SQL语句,如插入(INSERT)、更新(UPDATE)、删除(DELETE)和查询(SELECT)。执行完成后,使用`mysql_store_result()`或`mysql_use_result()`获取结果...

    程序员的数学1_程序员的数学_mathematica_programmer_

    《程序员的数学1》是一本面向程序员的数学入门书籍,旨在帮助编程人员理解和掌握数学在计算机科学中的应用。书中的内容可能涵盖了基础的数学概念、逻辑推理、算法分析以及更高级的数学工具,如线性代数、概率统计、...

    程序员面试金典5th_中文

    《程序员面试金典5th_中文》是一本深受程序员欢迎的面试指南,它全面覆盖了IT行业面试中可能遇到的各种问题和知识点。该书的第五版更是汇集了多年的面试实践和经验,旨在帮助程序员们更好地准备面试,提升自己的竞争...

    mysql.zip_MYSQL_c mysql_c# mysql

    MySQL是一种广泛使用的开源关系型数据库管理系统,其C API(应用程序编程接口)允许程序员用C语言直接与MySQL服务器交互。在“mysql.zip_MYSQL_c mysql_c# mysql”这个压缩包中,包含了一系列关于如何在C和C#环境下...

    Microsoft_Win32_程序员参考大全1_-_窗口管理和图形设备接口

    Microsoft_Win32_程序员参考大全1_-_窗口管理和图形设备接口

    程序员的数学3213_程序员的数学_数学_

    如果数学不好,是否可以成为一名程序员呢?答案是肯定的。 本书最适合:数学糟糕但又想学习编程的你。没有晦涩的公式,只有好玩的数学题。帮你掌握编程所需的“数学思维”。日文版已重印14次!编程的基础是计算机...

    mysql.rar_C++连接mysql_MYSQL连接_c 封装 mysql_mysql c++_mysql封装

    3. **连接数据库**:使用`mysql_real_connect()`函数连接到MySQL服务器。该函数需要服务器地址、用户名、密码、数据库名等参数。 4. **错误处理**:每次执行数据库操作后,都需要检查返回值并处理可能出现的错误,...

    MySQL.zip_MYSQL_delphi mysql_mysql delphi_zip

    在描述中提到的"MySQL library for Delphi"是指一个专门为Delphi设计的MySQL驱动程序或库,使得Delphi程序员能够通过编写代码连接、查询和操作MySQL数据库。这个库可能包含以下关键组件: 1. **连接组件**:通常...

    java_examine.rar_java 试题_程序员 面试_程序员面试_面试_面试题

    2. **面向对象**:类、对象、继承、多态、抽象类、接口、访问修饰符、构造函数等概念。 3. **集合框架**:ArrayList、LinkedList、HashMap、HashSet、TreeMap等数据结构的使用及原理。 4. **异常处理**:异常的...

    MySQL_API中文手册

    MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),其API(应用程序接口)允许程序员通过编写代码来执行SQL查询,管理数据库,以及实现其他数据库操作。 1. **MySQL API基础**: - MySQL API主要包括C API...

Global site tag (gtag.js) - Google Analytics