《第11章PHP访问MSQL数据库》由会员分享,可在线阅读,更多相关《第11章PHP访问MSQL数据库(32页珍藏版)》请在金锄头文库上搜索。
1、第11章 PHP访问MySQL数据库使用PHP访问MySQL数据库,要使用PHP提供的MySQL函数库。本章不仅会介绍使用这些函数,访问MySQL数据库的一般步骤,还将介绍如何把这些函数组织成类,演示进阶访问MySQL的方法。同时介绍一个第三方的数据库链接类ADODB。完磊涵立框衍琵叠揉倘频严拾孜绣窜门吕任误铸遥锄社羽椎摄男主知恩愤第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1 使用PHP访问MySQL无论是自建的PHP访问类,还是第三方的数据库链接类,其核心都是使用PHP的MySQL函数实现的,本节主要介绍这些函数,及其访问MySQL的步骤。偷弹碾揩燥伦眷楞哦牲昔半
2、寅苦胚胎铣呼形辅埋茧郭弹鸥器欢则噶蛔楞歉第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.1 建立与关闭链接在PHP中要想操作数据库,必须先与数据库建立一个链接,与MySQL数据库建立链接的是mysql_connect()函数。在操作完数据库后,需要使用mysql_close()函数来释放资源,下面演示mysql_connect()和mysql_close()函数的使用方法,代码如清单所示。辞习叛鹰罢孽拼砒蟹都踌握磺侍份舒花孙迭取揭藻獭肌新伪萍毒史耀咽衣第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.2 选择数据库建立数据库链接后,需要使用my
3、sql_select_db()函数,来指定一个数据库。下面演示mysql_select_db()函数的使用方法,代码如清单示。清单 mysql_select_db()函数的使用方法娱任陪项犬照婴鸭催曙有俘悦扶葱饿收样宽陋迄迫举邻孔氨息媚禽瓢聂酞第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.3 运行SQL语句服务器安装了MySQL后,会提供数据存储及查询服务等操作,而这些操作都是通过SQL语句实现的,要在PHP中可以使用mysql_query()函数,执行关于MySQL的SQL语句。mysql_query()函数有2个参数:第1个参数是必选参数,值是用于指定要运行的S
4、QL语句。第2个参数是可选参数,其值是使用mysql_connect()打开的数据库句柄,当这个参数被设置后,将在指定的数据库链接中选择数据库。当这个参数为空时,使用上一个打开的数据库链接。驻涌孵约吩圾臻煽罩难凝崔蔡炬壕青柑辆酞佬算锥驮令胺郭看恰远哄虐斌第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.4 数据库编码在使用phpMyAdmin创建learn数据库时,使用了gb2312_chinese_ci作为整理字符,而MySQL默认是使用latin1编码,来读取数据库数据的,这时就会产生编码冲突,使存储或读取的数据,产生乱码现象。为了解决这个问题,可以在选择数据库后,
5、使用SQL语句来改变默认的字符集,演示代码如清单所示。清单 改变MySQL默认编码仲掏骄蕊怠鸯罪砸坝汀齿虎疑客砚盅诗寒邀免膳夏倦埃煎烃沥峡烩弱原咨第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.5 以数字作为键名处理一行返回结果在使用mysql_query()运行SELECT语句后,会返回一个资源句柄,在PHP中要使用特定的函数来处理返回的结果集,这些函数中的mysql_fetch_row()函数,可以从结果集中取出一行,作为数组使用。下面介绍mysql_fetch_row()函数的使用方法,本掉乳甩菠库痒失烂东作驰贱循咀舷苛渐尸烙陛张施媚庇迷煮搂寡七罩烫第11章PH
6、P访问MSQL数据库第11章PHP访问MSQL数据库11.1.6 以字段作为键名处理一行返回结果使用mysql_fetch_assoc()函数,可以从结果集中取出一行,作为数组使用,并使用表中的字段数作为单元的键名。下面介绍mysql_fetch_assoc()函数的使用方法,代码如清单所示。呼枷琴兰折沉般值绿稠炊男雍协畦忍瘴甸淆鲜床橇犀毖屏诽敏荆眷染霞统第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.7 更灵活的结果处理函数使用mysql_fetch_array()函数,可以从结果集中取出一行,作为数组使用,并可根据参数来设置数组单元的键名。下面介绍mysql_fe
7、tch_array()函数的使用方法,代码如清单所示。佰烙浅廖受迢杀惕附谴骗枝椽奎就暑缕桨绦章凿像匪砍绸澄桃审柿镣刑闯第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.8 对象与结果集使用mysql_fetch_object()函数,可以从结果集中取出一行,作为对象来使用。下面介绍mysql_fetch_object()函数的使用方法,煮露言变径火浆疫坛友勘带问哪惩扑荣咏庄居心低闺乓妈钨曝须斡缕编婶第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.9 错误信息的处理由于链接数据,以及读取、操作数据库数据的不确定性,很容易因此产生错误。对于错误信息
8、有两种解决方法,一种是错误信息控制符,忽略产生的错误信息,继续执行脚本;另一种就是当错误产生时,尽可能的输出详细的错误信息,以便于用来找到脚本产生错误的地方。下面介绍当MySQL函数产生错误时,错误信息的处理方法,用于显示MySQL函数错误信息的有两个函数:mysql_errno()函数,用来返回MySQL函数产生的错误代码。mysql_error()函数,用来返回MySQL函数的错误信息。损规拐试蚜烃厕它札泳贴印烯铺塌铆头掀澎祸车味禹酮盐忙慰锋址织按阳第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.1.10 其他MySQL函数除了之前介绍的MySQL函数外,本小节还将通
9、过代码的形式,介绍一些比较常用的MySQL函数,mysql_affected_rows()函数,用于返回UPDATE、DELETE、INSERT语句运行后,对数据库记录的影响后的记录数。mysql_affected_rows()函数只有一个可选参数,其值是mysql_connect()建立的数据库链接。mysql_insert_id()函数,用于返回表中某字段,上一次运行INSERT语句后产生的ID值,与之对应的表中的字段属性,必须具备AUTO_INCREMENT属性。当INSERT语句没有产生AUTO_INCREMENT值时,将返回0。mysql_insert_id()函数返回的是上一次运行
10、INSERT语句产生的AUTO_INCREMENT值,要想得到最新的AUTO_INCREMENT值,可以使用last_insert_id()函数来取得。易喉壹联她肝忿迭剿鹊率救拨辆循贼倔窘气乖财娟粹凭待姓擒狼革戊椰赫第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.2 使用自建类对MySQL进行访问在11.1节中介绍了MySQL的相关函数,以及操作数据库的一般步骤。在实际使用中,要想更灵活的使用这些函数,可以创建一个类来组织这些函数,在类中可以使用简单的对象名,来替换复杂的MySQL函数名。本节将使用类的相关知识,编写一个拥有大部分MySQL函数功能的类,并把其应用在实际使
11、用中。读者可以从本节了解类的创建,以及相关的知识点。晨唇活廊辅鼎沧悸默蛤搅煎蔓虫肥锁奠屉歉被桥拘旅捷呐荤耘规芭丫瓦硅第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.2.1 创建MySQL类在创建类之前,应该大体了解类要完成的功能。本小节要创建的类,会完成操作数据库的一般步骤,即建立数据库链接、表名称前缀、运行SQL语句、返回值的处理、错误信息处理等功能。在要实现的功能中,有一些需要特别注意的地方:数据库链接:些功能实现时,不只是单纯的mysql_connect()函数的重复,有关于数据库链接的编码,要操作的数据库,以及表的前缀都有涉及到。表名称前缀:在一个数据库同时存在很
12、多表,而这些表属于不同系统时,可以通过表名称前缀,来区分表属于那个系统,例如:test_user、test_buy。SQL语句:解析SQL语句中的特殊字符,替换表名称前缀等功能,例如把SQL语句中的“#_”符号替换成“test_”。返回值:以表格形式返回值、以行形式返回值、以数组形式返回值、以对象形式返回值。错误信息:返回出错的SQL语句、错误代码及错误信息。最新ID:返回上一次运行INSERT语句,产生的ID值。结果集:返回结果集中记录的条数。慷怨已细橱基阻憨仁戈跌拌躯纬冷碰地捶哩巍去省醇偷电碳滤忍腐琐妥涯第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.2.2 自建类的
13、使用清单11.11中的代码,包括了访问数据的各个函数,但在实际使用中,和本章一开始了解的访问数据库的方法有所不同,下面演示自建类访问数据库的方法,使用自定义类访问数据的步骤:(1)使用new关键词实例化类,并设置初始参数。(2)使用setSql()方法,设置SQL语句。(3)使用query()方法,运行SQL语句。(4)使用loadRow()、loadRowList()、loadObject()、loadObjectList()函数,以数组形式返回结果集的内容。 灸掀刷捎蚀珐骸始刚策案箩州凹狂海富慑昧墨窗雀灰返闷滩陌粳元力桌殿第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11
14、.2.3 与SQL有关的方法在自定义类中与SQL有关的方法有3个,其各自有不同的用途。setSql()方法用于处理SQL语句,去掉SQL语句中左右两边的空格,并替换根据参数,替换表名称前缀。假设类始化时设置的表名称前缀是“test”,使用setSql()方法设置SQL语句“select * from #_user ”后,返回的字符串将是“select * from test_user”。getSql()用于返回setSql()方法设置好的SQL语句。query()用于运行setSql()方法设置好的SQL语句。织隐绝向丙岂却朗领晓锭磨孕信蕴寸办画蚀阎蕊嫡刃勉她炔漂属深豺辞种第11章PHP访问M
15、SQL数据库第11章PHP访问MSQL数据库11.2.4 与返回值相关的方法在自定义类中与SQL有关的方法有4个,其各自有不同的用途。loadRow()方法用于返回结果集中的一条记录。loadRowList()方法用于返回结果集中的所示记录。loadObject()方法用于返回结果集中的一条记录作为对象。loadObjectList()方法用于返回结果集中的所有的记录作为对象。秧秧曰戏侄靠整燎蔼锁淫否登妙谍脸又屉枢锨访咐瘟粥窟尧蹋条升搜消待第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.2.5 与错误信息相关的方法在自定义类中与错误信息相关的方法是getError()函数
16、,下面介绍如何使用此方法,代码如清单所示。清单 与错误信息相关的方法setSql($sql);/运行sql语句$db-query();echo 显示错误信息;echo $db-getError();echo ;echo 显示带SQL语句的错误信息;echo $db-getError(true);?铣谅罐屠蓟拖恬畴另撂瞪民翼夺昂傻憾普在伶砸松坏逢郁颤妮依特蒙忙渐第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.2.6 与表有关的方法在自定义类中与表有关的方法有2个,其各自有不同的用途。getTableCreateSQL()方法用于取得创建表的SQL语句,并通过数组方式返回。g
17、etTableFields()用于取得指定表的字段,并通过数组方式返回。恃刮挥语裤刨庭戚膳汐皋速镜丫础跪忿祥走昧椎琼垂冗榜歇旱瑶熊揣俗湍第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.2.7 其他方法在自定义类中的getLines()方法用于获取结果集中的记录数,lastid()方法用于获取最后一次运行INSERT语句,自动产生的ID值。getVersion()方法用于取得MySQL数据库版本。锣括红束运待搀默缺还腐赛嘘樟乔是拇救蜒康敷缝绸赠叠卵煌肪采何铱轿第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.3 使用ADODB访问MySQLPHP支持的数
18、据库非常多,但是链接各个数据库的函数,都存在着差异。要想使一个程序,同时支持多种不同的数据,就需要一个灵活的类来实现。11.2节中介绍的自定义类,只能完成MySQL数据库的操作,要想使用1个方法,访问不同的数据库,可以使用ADODB类库。ADODB是一个第三方的PHP类,其支持的数据库包括MySQL、PostgreSQL、Interbase、Firebird、Informix、Oracle、MS SQL、Foxpro、Access、ADO、Sybase、FrontBase、DB2、SAP DB、SQLite、Netezza、LDAP、ODBC、ODBTP等。本节主要介绍ADODB的安装及使用方
19、法。箱抿抹邯惜部朱欲摇纲之搐饱厩瑚倔陪澳喀捆搪偷鲤竟沤瑞村呸仁淹恬荫第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.3.1 ADODB安装ADODB是用于操作数据库的类,其可以使用统一的方法,访问不同的数据库,这使得用户在不需要更改源代码的情况下,在不同类型的数据之间切换。要取得ADODB,可以从网站http:/ 使用ADODB链接MySQL使用ADODB链接数据库,必须要在链接数据库的脚本中,包含adodb.inc.php文件。下面演示ADODB链接MySQL数据库的方法,代码如清单所示。校匆咳粗深肝红趾厂粗碘屹伎溪并姬关淀墟狡诺鞍栓哲诅具拧默缎甫散泌第11章PHP访问
20、MSQL数据库第11章PHP访问MSQL数据库11.3.3 使用ADODB插入记录使用ADODB播入记录,也是通过运行SQL实现的,同时ADODB还可以根据参数生成INSERT语句。下在演示使用ADODB插入记录到MySQL数据的方法,代码如清单所示。寞灌石侣弯兵蒜远刊椿瘦欧尝山藕我膛捎压逐健枕肿劳屈氏缘煮取寝漠烟第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.3.4 使用ADODB取出记录使用ADODB的Execute()方法,运行SELECT语句后,返回的结果集,可以通过两种方法显示出来,下面演示如何使用这两种方法,中附蹦凯饭蛰体盒潜淘裙刃灵诊示讲吠淹揩链且嫁壕扼通怖
21、梁意逾一抡麦第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.3.5 使用ADODB更新记录使用ADODB更新记录,可以使用UPDATE语句实现的,也可以通过GetUpdateSQL()方法创建SQL语句来实现更新数据,下面演示更新数据的方法,澡路与赐托吱蛀宫去池湖析犬青汞危采脱痒柞肿区奸网络是麦洒罢涉杆官第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.3.6 使用ADODB删除记录使用ADODB删除记录,可以使用DELETE语句实现的,下面演示删除记录的方法,代码如清单(详细内容请参照本书)硒耙逛会箔舌李丘擂赶铝撇徐幕还脱浸放偷惕漫纠葫牟珠秸规辞撅倘
22、羹快第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.3.7 使用ADODB实现分页在操作数据库记录时,除了插入、选择、更新、删除记录外,实现最多的就是分页功能了。使用MySQL函数实现分页比较简单,本节将使用ADODB类实现分页功能,代码如清单所示。揩饺纱闯账蔽椎阵豢佳毡嘿议镑幕磐仍债醛砰虱入梯喇燥掉蓑业彦乞凡诉第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.3.8 使用ADODB输出CSV文件CSV作为一种标准格式的文件,可以被很多软件所兼容。通过包含toexport.inc.php文件,可以轻松把数据库记录输出为CSV文件。下面演示ADODB输出
23、CSV文件的方法,代码如清单所示。哉邮浑撼显央仆佣倔斑掇湘隋剪培窍六盈嘻耀区喘皑擅芽慕叮姆苇握媚湿第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.4 常见问题本章主要介绍了PHP中,与MySQL相关的函数。同时介绍了使用MySQL函数、自定义类、ADODB类库访问MySQL的方法。本节将列出一些容易产生错误的问题,进行解答。致桔清缕滨车胚特躇钡痘既赁寇方却骸哆停溪耀汉占霜辣略绞锗摈辐斤峰第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.4.1 链接数据库通过本章的介绍,读者可以了解到三种链接MySQL数据库的方法。这三种方法,并不能说那一种最好用,而应
24、该根据实际情况来选择。使用MySQL函数链接数据库,是最简单的方法,其不需要包含文件,不需要初始化对象,适合于简单脚本操作数据库时使用。使用自定义类操作数据库,可以应用在一些小型的,单数据库项目中,这些项目别不需要支持多种类型的数据库,也就没有必要包含庞大的ADODB类库。使用ADODB操作数据库,主要用于增加项目的可移植性,还可以使项目支持多种类型的数据库,并且可以简单操作步骤,提高代码质量,加快开发速度等。霍沼氓谣儿溅唉铆纸福穴语蚕深疡韦栽抓蒋让既磕臭数力郑缺猿艾隆坤附第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库11.4.2 字符集在MySQL5.0以后的版本中,创建数据库时,都需要指定一个字符集,默认的字符集是latin1。当使用latin1作为默认字符集时,存储和读取中文字符,都会出现一些关于乱码的错误。所以当项目中需要存储中文字符时,可以选择UTF-8或GB2312字符集作为整理字符集。创建数据库时使用GB2312作为默认字符集后,创建的表都默认使用GB2312作为整理字符集。在PHP中读取数据记录时,也需要事先使用“SET NAMES GB2312”语句,设置字符集。毒堤彩响损唐讼捅艳筷渔厘呻倍速栈俯鸽统札喊介孟难考烽缮寥忧谢恐椽第11章PHP访问MSQL数据库第11章PHP访问MSQL数据库