《第11章PHP访问MySQL数据库》由会员分享,可在线阅读,更多相关《第11章PHP访问MySQL数据库(32页珍藏版)》请在金锄头文库上搜索。
1、第11章 PHP访问MySQL数据库使用PHP访问MySQL数据库,要使用PHP提供的MySQL函数库。本章不仅会介绍使用这些函数,访问MySQL数据库的一般步骤,还将介绍如何把这些函数组织成类,演示进阶访问MySQL的方法。同时介绍一个第三方的数据库链接类ADODB。糙是肾漱珐嘉荚缔娃喂袍担肉墅蓑实棺记拥园卵斋妨只垣绅侗忌蜜轩光唤第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1 使用PHP访问MySQL无论是自建的PHP访问类,还是第三方的数据库链接类,其核心都是使用PHP的MySQL函数实现的,本节主要介绍这些函数,及其访问MySQL的步骤。联瑰瑰窝唾孝盛压团藏
2、疙拨后展历砧杠帅炊北江痴炯翁显格摄弛背旅闲措第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.1 建立与关闭链接在PHP中要想操作数据库,必须先与数据库建立一个链接,与MySQL数据库建立链接的是mysql_connect()函数。在操作完数据库后,需要使用mysql_close()函数来释放资源,下面演示mysql_connect()和mysql_close()函数的使用方法,代码如清单所示。圣悉介缎紧憨绦她赐抿通囱浓宾吾匡苯涌娩怠裤溺漫釉耐箍胺必栈酶透娃第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.2 选择数据库建立数据库链接后,
3、需要使用mysql_select_db()函数,来指定一个数据库。下面演示mysql_select_db()函数的使用方法,代码如清单示。清单 mysql_select_db()函数的使用方法娜踩让闷轿盲泼苍肺考力须杭康跪涵竹梗仗债嘴衷巍敝根埠沂杆裙犊赘锻第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.3 运行SQL语句服务器安装了MySQL后,会提供数据存储及查询服务等操作,而这些操作都是通过SQL语句实现的,要在PHP中可以使用mysql_query()函数,执行关于MySQL的SQL语句。mysql_query()函数有2个参数:第1个参数是必选参数,值是用
4、于指定要运行的SQL语句。第2个参数是可选参数,其值是使用mysql_connect()打开的数据库句柄,当这个参数被设置后,将在指定的数据库链接中选择数据库。当这个参数为空时,使用上一个打开的数据库链接。孤层搐儒聘甲彻备喉凹旋挥申类毁朵讼计站敛娇藤递韭个舶候史灿忱萨龙第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.4 数据库编码在使用phpMyAdmin创建learn数据库时,使用了gb2312_chinese_ci作为整理字符,而MySQL默认是使用latin1编码,来读取数据库数据的,这时就会产生编码冲突,使存储或读取的数据,产生乱码现象。为了解决这个问题,
5、可以在选择数据库后,使用SQL语句来改变默认的字符集,演示代码如清单所示。清单 改变MySQL默认编码池迂蛰践绢窒亨例捆屡泞马穴计公魄娱挠侮雷黔鲜员啄氮哉楼困掸悟槛坦第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.5 以数字作为键名处理一行返回结果在使用mysql_query()运行SELECT语句后,会返回一个资源句柄,在PHP中要使用特定的函数来处理返回的结果集,这些函数中的mysql_fetch_row()函数,可以从结果集中取出一行,作为数组使用。下面介绍mysql_fetch_row()函数的使用方法,赫窍厄管鼠锨浮赞带寒贰震舅酷霸横劣妨仆购壹载孩噎丢闻
6、收哺辱点略泉第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.6 以字段作为键名处理一行返回结果使用mysql_fetch_assoc()函数,可以从结果集中取出一行,作为数组使用,并使用表中的字段数作为单元的键名。下面介绍mysql_fetch_assoc()函数的使用方法,代码如清单所示。泉纵姓驰塔乎戳橇枪啮象彬蛮晚揭峡熟织北稼爱宿话岛鹅创便肩搏阁押话第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.7 更灵活的结果处理函数使用mysql_fetch_array()函数,可以从结果集中取出一行,作为数组使用,并可根据参数来设置数组单元
7、的键名。下面介绍mysql_fetch_array()函数的使用方法,代码如清单所示。跟菇咳忌嘱虞纺平纤捎镭畸枚橱稚乡矣吕诊隅冕含朽柒碰趁如挖屎询狡卵第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.8 对象与结果集使用mysql_fetch_object()函数,可以从结果集中取出一行,作为对象来使用。下面介绍mysql_fetch_object()函数的使用方法,诞陷苑菌契辨奖奠逝骏厩椽橡诉版扩告总峪辖片绣獭合担您叭朵扳学柒疹第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.9 错误信息的处理由于链接数据,以及读取、操作数据库数据的不
8、确定性,很容易因此产生错误。对于错误信息有两种解决方法,一种是错误信息控制符,忽略产生的错误信息,继续执行脚本;另一种就是当错误产生时,尽可能的输出详细的错误信息,以便于用来找到脚本产生错误的地方。下面介绍当MySQL函数产生错误时,错误信息的处理方法,用于显示MySQL函数错误信息的有两个函数:mysql_errno()函数,用来返回MySQL函数产生的错误代码。mysql_error()函数,用来返回MySQL函数的错误信息。铭刨吠凿颧枚瞧侩遣琵顾畴坪沙炽婉俘圭眠嫁搓均赠帝互妹耳扦渝宾唁婶第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.1.10 其他MySQL函数
9、除了之前介绍的MySQL函数外,本小节还将通过代码的形式,介绍一些比较常用的MySQL函数,mysql_affected_rows()函数,用于返回UPDATE、DELETE、INSERT语句运行后,对数据库记录的影响后的记录数。mysql_affected_rows()函数只有一个可选参数,其值是mysql_connect()建立的数据库链接。mysql_insert_id()函数,用于返回表中某字段,上一次运行INSERT语句后产生的ID值,与之对应的表中的字段属性,必须具备AUTO_INCREMENT属性。当INSERT语句没有产生AUTO_INCREMENT值时,将返回0。mysql_
10、insert_id()函数返回的是上一次运行INSERT语句产生的AUTO_INCREMENT值,要想得到最新的AUTO_INCREMENT值,可以使用last_insert_id()函数来取得。捷壁掇槛郁犹抄臆担婴该硕来益善信堤然匝螺妥煤超真仪戊匈他枕根献晃第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.2 使用自建类对MySQL进行访问在11.1节中介绍了MySQL的相关函数,以及操作数据库的一般步骤。在实际使用中,要想更灵活的使用这些函数,可以创建一个类来组织这些函数,在类中可以使用简单的对象名,来替换复杂的MySQL函数名。本节将使用类的相关知识,编写一个拥有
11、大部分MySQL函数功能的类,并把其应用在实际使用中。读者可以从本节了解类的创建,以及相关的知识点。参驾呢哇鸥驾尤导滑佣娶圃限僵家爷虎肛屑负水褐护秤述兽甩谣蚤因狠饥第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.2.1 创建MySQL类在创建类之前,应该大体了解类要完成的功能。本小节要创建的类,会完成操作数据库的一般步骤,即建立数据库链接、表名称前缀、运行SQL语句、返回值的处理、错误信息处理等功能。在要实现的功能中,有一些需要特别注意的地方:数据库链接:些功能实现时,不只是单纯的mysql_connect()函数的重复,有关于数据库链接的编码,要操作的数据库,以及表
12、的前缀都有涉及到。表名称前缀:在一个数据库同时存在很多表,而这些表属于不同系统时,可以通过表名称前缀,来区分表属于那个系统,例如:test_user、test_buy。SQL语句:解析SQL语句中的特殊字符,替换表名称前缀等功能,例如把SQL语句中的“#_”符号替换成“test_”。返回值:以表格形式返回值、以行形式返回值、以数组形式返回值、以对象形式返回值。错误信息:返回出错的SQL语句、错误代码及错误信息。最新ID:返回上一次运行INSERT语句,产生的ID值。结果集:返回结果集中记录的条数。刊津刚谬再磐牺虹旗燎掖露栋剩谅挨逊樊说将玲桐哪圾莫凰铬恫爽胎犹旁第11章PHP访问MySQL数据库
13、第11章PHP访问MySQL数据库11.2.2 自建类的使用清单11.11中的代码,包括了访问数据的各个函数,但在实际使用中,和本章一开始了解的访问数据库的方法有所不同,下面演示自建类访问数据库的方法,使用自定义类访问数据的步骤:(1)使用new关键词实例化类,并设置初始参数。(2)使用setSql()方法,设置SQL语句。(3)使用query()方法,运行SQL语句。(4)使用loadRow()、loadRowList()、loadObject()、loadObjectList()函数,以数组形式返回结果集的内容。 茄裳蝎猜驴妆履涕溢睦仓轩楚轮幕果荡摹烷雌兵尊喳叹砾翻沾芒蒜令氏也第11章PH
14、P访问MySQL数据库第11章PHP访问MySQL数据库11.2.3 与SQL有关的方法在自定义类中与SQL有关的方法有3个,其各自有不同的用途。setSql()方法用于处理SQL语句,去掉SQL语句中左右两边的空格,并替换根据参数,替换表名称前缀。假设类始化时设置的表名称前缀是“test”,使用setSql()方法设置SQL语句“select * from #_user ”后,返回的字符串将是“select * from test_user”。getSql()用于返回setSql()方法设置好的SQL语句。query()用于运行setSql()方法设置好的SQL语句。尝惫毅暴色画区艾涵吨穿傍
15、涛讥交驮畴婿蕴零渊蔑粤灵司乓交场转拍傈温第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.2.4 与返回值相关的方法在自定义类中与SQL有关的方法有4个,其各自有不同的用途。loadRow()方法用于返回结果集中的一条记录。loadRowList()方法用于返回结果集中的所示记录。loadObject()方法用于返回结果集中的一条记录作为对象。loadObjectList()方法用于返回结果集中的所有的记录作为对象。炬搽但讽怂剩遣澳灿荆痛鸽屉皂乍鉴疆卤惠芍存阳搔理朝捡儒劝殴晨放盂第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.2.5 与错误信息
16、相关的方法在自定义类中与错误信息相关的方法是getError()函数,下面介绍如何使用此方法,代码如清单所示。清单 与错误信息相关的方法setSql($sql);/运行sql语句$db-query();echo 显示错误信息;echo $db-getError();echo ;echo 显示带SQL语句的错误信息;echo $db-getError(true);?靛怂田城屿轧揪掇揩剃褪劫慕桑凭垮叶亡菌彻馋朱雄系成炸湿毅开涨阀邑第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.2.6 与表有关的方法在自定义类中与表有关的方法有2个,其各自有不同的用途。getTableCr
17、eateSQL()方法用于取得创建表的SQL语句,并通过数组方式返回。getTableFields()用于取得指定表的字段,并通过数组方式返回。辣诞乒皇八田靡硝娜窄拷茬兢墓搬昌材寇棉曙迪捕郡蛤激予典脯磁弦亭揽第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.2.7 其他方法在自定义类中的getLines()方法用于获取结果集中的记录数,lastid()方法用于获取最后一次运行INSERT语句,自动产生的ID值。getVersion()方法用于取得MySQL数据库版本。垮汐懂礼惟罪癸揪休正暇牙陡莫椰唱崇艳韩贪嗓爪汤蛹巴太呈魔邮挣删宗第11章PHP访问MySQL数据库第11
18、章PHP访问MySQL数据库11.3 使用ADODB访问MySQLPHP支持的数据库非常多,但是链接各个数据库的函数,都存在着差异。要想使一个程序,同时支持多种不同的数据,就需要一个灵活的类来实现。11.2节中介绍的自定义类,只能完成MySQL数据库的操作,要想使用1个方法,访问不同的数据库,可以使用ADODB类库。ADODB是一个第三方的PHP类,其支持的数据库包括MySQL、PostgreSQL、Interbase、Firebird、Informix、Oracle、MS SQL、Foxpro、Access、ADO、Sybase、FrontBase、DB2、SAP DB、SQLite、Net
19、ezza、LDAP、ODBC、ODBTP等。本节主要介绍ADODB的安装及使用方法。尊衔奏层蚤捐缄蕊镜撑例败戈雾俄啪绷诧徘冀馈肪宠瞳勋徘官耿影捍址弄第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.3.1 ADODB安装ADODB是用于操作数据库的类,其可以使用统一的方法,访问不同的数据库,这使得用户在不需要更改源代码的情况下,在不同类型的数据之间切换。要取得ADODB,可以从网站http:/ 使用ADODB链接MySQL使用ADODB链接数据库,必须要在链接数据库的脚本中,包含adodb.inc.php文件。下面演示ADODB链接MySQL数据库的方法,代码如清单所示
20、。漓浙任凉葫灌哨屑虚瘟榨札果存凿隔朽差有骗决苯汞昧弥姚端用愈罗酷皆第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.3.3 使用ADODB插入记录使用ADODB播入记录,也是通过运行SQL实现的,同时ADODB还可以根据参数生成INSERT语句。下在演示使用ADODB插入记录到MySQL数据的方法,代码如清单所示。土寅泣谰港郑摆桐描沽爷塘厢征宾袜葡契灰涎涤言民净改盾窿俗梢扼毕航第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.3.4 使用ADODB取出记录使用ADODB的Execute()方法,运行SELECT语句后,返回的结果集,可以通过两种方
21、法显示出来,下面演示如何使用这两种方法,蛹卵别宣租缚急银竭锑瞳棺玄鸿决罗挥什鲤姑瞥抒厦禾识拍县脐搀胎钎颧第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.3.5 使用ADODB更新记录使用ADODB更新记录,可以使用UPDATE语句实现的,也可以通过GetUpdateSQL()方法创建SQL语句来实现更新数据,下面演示更新数据的方法,赫遍泥盼览丛掠纤添喘惊裔罪笛党弦亲练枷正甩痔谩佳掣艰胀贪寺羡泞蕉第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.3.6 使用ADODB删除记录使用ADODB删除记录,可以使用DELETE语句实现的,下面演示删除记录
22、的方法,代码如清单(详细内容请参照本书)抛煮吃刀椰两蹬俘期吏樱黔液批炭拎体睁彩烙穿灶鼻熬鹅缠撬拘钻邦氨挠第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.3.7 使用ADODB实现分页在操作数据库记录时,除了插入、选择、更新、删除记录外,实现最多的就是分页功能了。使用MySQL函数实现分页比较简单,本节将使用ADODB类实现分页功能,代码如清单所示。髓侨录宅敷侮佃乘憾霄合彻可远蕾您泼祷奄因淫豌酥慷椭齐口徊士堡库素第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.3.8 使用ADODB输出CSV文件CSV作为一种标准格式的文件,可以被很多软件所兼容
23、。通过包含toexport.inc.php文件,可以轻松把数据库记录输出为CSV文件。下面演示ADODB输出CSV文件的方法,代码如清单所示。卷歌身冗诀笨文旗编鸟卞汽躇刃祈帽汞倔沮撒睁浪弃良畏走佛栖狗酸脯凑第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.4 常见问题本章主要介绍了PHP中,与MySQL相关的函数。同时介绍了使用MySQL函数、自定义类、ADODB类库访问MySQL的方法。本节将列出一些容易产生错误的问题,进行解答。硫迟搬潦操原棘楷木途殃啄儒色征祟向扳绎户显韶杖极颜鄂侩剔俞凹崩寞第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.4
24、.1 链接数据库通过本章的介绍,读者可以了解到三种链接MySQL数据库的方法。这三种方法,并不能说那一种最好用,而应该根据实际情况来选择。使用MySQL函数链接数据库,是最简单的方法,其不需要包含文件,不需要初始化对象,适合于简单脚本操作数据库时使用。使用自定义类操作数据库,可以应用在一些小型的,单数据库项目中,这些项目别不需要支持多种类型的数据库,也就没有必要包含庞大的ADODB类库。使用ADODB操作数据库,主要用于增加项目的可移植性,还可以使项目支持多种类型的数据库,并且可以简单操作步骤,提高代码质量,加快开发速度等。冤绞粹横编幕赌卤酪耗坞窿德胁妖八蓖损丑隘嘉毅菏男诡友箔阔衫肩缨谣第11
25、章PHP访问MySQL数据库第11章PHP访问MySQL数据库11.4.2 字符集在MySQL5.0以后的版本中,创建数据库时,都需要指定一个字符集,默认的字符集是latin1。当使用latin1作为默认字符集时,存储和读取中文字符,都会出现一些关于乱码的错误。所以当项目中需要存储中文字符时,可以选择UTF-8或GB2312字符集作为整理字符集。创建数据库时使用GB2312作为默认字符集后,创建的表都默认使用GB2312作为整理字符集。在PHP中读取数据记录时,也需要事先使用“SET NAMES GB2312”语句,设置字符集。骚灌粟秤墨埠真外壹帧承况匙歌乒憾身渤奉汹吐苞箔孵融迂答之死全揽止第11章PHP访问MySQL数据库第11章PHP访问MySQL数据库