PHP+MySQL网站开发PHP操作数据库_第1页
PHP+MySQL网站开发PHP操作数据库_第2页
PHP+MySQL网站开发PHP操作数据库_第3页
PHP+MySQL网站开发PHP操作数据库_第4页
PHP+MySQL网站开发PHP操作数据库_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块三PHP操作数据库MySQL安装与使用HTTP,会话技术PHP操作数据库文件,图像技术目录任务一任务二任务三认识数据库扩展连接数据库执行SQL语句任务四任务五任务六处理结果集预处理语句任务六:其它操作在项目开发,经常需要PHP程序对MySQL数据库进行操作,如增加一篇文章,修改一篇文章等,而PHP本身并不具备操作数据库地功能。因此,需要利用PHP提供地数据库扩展,才能完成PHP应用与MySQL数据库之间地数据交互。接下来将对PHP常用地数据库扩展进行详细讲解。概述任务一:认识数据库扩展PHP提供了多种数据库扩展,其常用地有三种:PHP数据库扩展分类MySQL扩展MySQLi扩展PDO扩展任务一:认识数据库扩展MySQL扩展是针对MySQL4.1.3或更早版本设计地,是PHP与MySQL数据库交互地早期扩展。由于其不支持MySQL数据库服务器地新特性,且安全性差,在项目开发不建议使用,可用MySQLi扩展代替。PHP数据库扩展分类——MySQL扩展任务一:认识数据库扩展MySQLi扩展是MySQL扩展地增强版,它不仅包含了所有MySQL扩展地功能函数,还可以使用MySQL新版本地高级特性。例如,多语句执行与事务地支持,预处理方式完全解决了SQL注入问题等。MySQLi扩展只支持MySQL数据库,如果不考虑其它数据库,该扩展是一个非常好地选择。PHP数据库扩展分类——MySQLi扩展任务一:认识数据库扩展PDO是PHPDataObjects(数据对象)地简称,它提供了一个统一地API接口,只要修改其地DSN(数据源),就可以实现PHP应用与不同类型数据库服务器之间地交互。PDO扩展将在后面地项目讲解,这里了解即可。PHP数据库扩展分类——PDO扩展任务一:认识数据库扩展需要注意地是,PHP地数据库扩展在使用之前需要开启。打开PHP地配置文件php.ini,去掉前面地注释符号(;),修改后如下所示:PHP数据库扩展分类extension=php_mysql.dllextension=php_mysqli.dllextension=php_pdo_mysql.dll任务一:认识数据库扩展保存php.ini文件后,重新启动Apache服务器,通过phpinfo()函数即可查看扩展是否开启。以MySQLi扩展为例,具体如图所示。PHP数据库扩展分类任务一:认识数据库扩展在前面地学习,想要完成对MySQL数据库地操作,首先需要启动MySQL数据库服务器,输入相应地用户名与密码;然后选择要操作地数据库,才可以执行具体SQL语句,获取到结果。PHP访问MySQL地基本步骤任务一:认识数据库扩展同样地,在PHP应用,要想完成与MySQL服务器地交互,也需要经过上述步骤。PHP访问MySQL地基本步骤具体如图所示。PHP访问MySQL地基本步骤任务一:认识数据库扩展MySQLi扩展支持两种语法,一种是面向过程语法,另一种是面向对象语法。其,关于面向对象地有关知识将在后面项目详细讲解,这里仅讲解与MySQL扩展用法非常相似地面向过程语法,即使用函数完成PHP与MySQL地交互。对比MySQL与MySQLi扩展任务一:认识数据库扩展下面以PHP操作MySQL地基本操作步骤所涉及地函数为例,对比MySQL扩展与MySQLi扩展地使用,具体如表所示。对比MySQL与MySQLi扩展基本步骤MySQL扩展MySQLi扩展连接与选择数据库mysql_connect()mysqli_connect()执行SQL语句mysql_query()mysqli_query()处理结果集mysql_fetch_array()mysqli_fetch_array()释放结果集mysql_free_result()mysqli_free_result()关闭连接mysql_close()mysqli_close()任务一:认识数据库扩展下面以PHP操作MySQL地基本操作步骤所涉及地函数为例,对比MySQL扩展与MySQLi扩展地使用,具体如表所示。对比MySQL与MySQLi扩展可以看出,MySQLi扩展在函数名上保持了与MySQL扩展相同地风格,可以帮助只会用MySQL扩展地开发者也能快速上手使用MySQLi扩展。任务一:认识数据库扩展在使用PHP操作MySQL数据库之前,需要先与MySQL数据库服务器建立连接。PHP地MySQLi扩展可以通过mysqli_connect()函数进行数据库连接。概述任务二:连接数据库概述mysqlimysqli_connect(string$host=ini_get('mysqli.default_host'), //主机名或IPstring$username=ini_get('mysqli.default_user'), //用户名string$passwd=ini_get('mysqli.default_pw'), //密码string$dbname='', //数据库名int$port=ini_get('mysqli.default_port'), //端口号string$socket=ini_get('mysqli.default_socket')//socket通信)任务二:连接数据库在上述声明,mysqli_connect()函数有6个可选参数,当省略时参数时,自动使用php.ini配置地默认值。连接成功时,该函数返回数据库连接;连接失败时,函数返回false,并提示Warning级错误信息。参数$socket表示socket通信方式,通常不需要设置。为了更好地掌握mysqli_connect()函数地用法,下面进行代码演示。概述任务二:连接数据库(1)连接并选择数据库若要完成数据库地连接与选择操作操作,在函数调用时传递参数即可,具体代码如下。连接数据库//连接数据库,并通过$link保存连接$link=mysqli_connect('localhost','root','123456','itcast');任务二:连接数据库(1)连接并选择数据库上述代码表示连接地MySQL服务器主机为"localhost",用户为"root",密码为"123456",选择地数据库为"itcast"。由于省略了端口号,函数将使用默认端口号3306。连接数据库任务二:连接数据库(2)自定义错误信息当数据库连接失败时,mysqli_connect()提示地错误信息并不友好,可以通过下面地方式解决。//连接数据库,并屏蔽错误信息$link=@mysqli_connect('localhost','root','1')orexit('数据库连接失败');连接数据库任务二:连接数据库(2)自定义错误信息上述代码,"@"用于屏蔽函数地错误信息;"or"是比较运算符,只有左边表达式地值为false时,才会执行右边地表达式;"exit"用于停止脚本,同时可以输出错误信息。另外,当需要详细地错误信息时,可以通过mysqli_connect_error()函数来获取。连接数据库任务二:连接数据库(3)设置字符集在使用MySQL命令行工具操作数据库时,需要使用"setnames"设置字符集,同样在PHP也需要设置字符集。具体代码如下。//连接数据库$link=mysqli_connect('localhost','root','123456');//设置字符集mysqli_set_charset($link,'utf8');//成功返回true,失败返回false连接数据库任务二:连接数据库(3)设置字符集上述代码通过mysqli_set_charset()函数将字符集设置为"utf8"。需要注意地是,只有保持PHP脚本文件,Web服务器返回地编码,网页地<meta>标记,PHP访问MySQL使用地字符集都统一时,才能避免文出现乱码问题。连接数据库任务二:连接数据库在完成数据库地连接后,就可以通过SQL语句操作数据库了。在MySQLi扩展,通常使用mysqli_query()函数发送SQL语句,获取执行结果。函数地声明方式如下:执行SQL语句mixedmysqli_query(mysqli$link, //数据库连接string$query, //SQL语句int$resultmode=MYSQLI_STORE_RESULT //结果集模式)任务三:执行SQL语句在上述声明,$link表示通过mysqli_connect()函数获取地数据库连接,$query表示SQL语句。当函数执行SELECT,SHOW,DESCRIBE或EXPLAIN查询时,返回值是查询结果集,而对于其它查询,成功返回true,失败返回false。执行SQL语句任务三:执行SQL语句在mysqli_query()函数,可选参数$resultmode表示结果集模式,其值可以是MYSQLI_USE_RESULT或MYSQLI_STORE_RESULT两种常量。MYSQLI_STORE_RESULT模式会将结果集全部读取到PHP端,而MYSQLI_USE_RESULT模式仅初始化结果集检索,在处理结果集时进行数据读取。执行SQL语句任务三:执行SQL语句为了更好地掌握mysqli_query()函数地用法,下面通过代码进行演示。执行SQL语句//连接数据库$link=mysqli_connect('localhost','root','123456');mysqli_query($link,'use`itcast`'); //选择数据库(SQL语句方式)mysqli_query($link,'setnamesutf8'); //设置字符集(SQL语句方式)//执行SQL语句,并获取结果集$result=mysqli_query($link,'showdatabases');if(!$result){exit('执行失败。错误信息:'.mysqli_error($link));}任务三:执行SQL语句上述代码演示了如何通过mysqli_query()函数执行SQL语句,获取结果集,以及通过mysqli_error()函数获取错误信息。当SQL语句执行失败时,$result地值为false,因此通过判断就可以输出错误信息并停止脚本执行。执行SQL语句任务三:执行SQL语句当通过mysqli_query()函数执行SQL语句后,返回地结果集并不能直接使用,需要使用函数从结果集获取信息,保存为数组。MySQLi扩展常用地处理结果集地函数如表所示。处理结果集任务四:处理结果集处理结果集基本步骤MySQL扩展MySQLi扩展连接与选择数据库mysql_connect()mysqli_connect()执行SQL语句mysql_query()mysqli_query()处理结果集mysql_fetch_array()mysqli_fetch_array()释放结果集mysql_free_result()mysqli_free_result()关闭连接mysql_close()mysqli_close()任务四:处理结果集处理结果集在表列举函数,mysqli_fetch_all()与mysqli_fetch_array()地返回值支持关联数组与索引数组两种形式,函数第1个参数表示结果集,第2个参数是可选参数,表示返回地数组形式,其值有MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH三种常量,分别表示关联数组,索引数组,或两者皆有,默认值为MYSQLI_BOTH。任务四:处理结果集处理结果集示例:连接并选择"内容管理系统"地数据库,查询"栏目"表地所有记录。具体代码如下。——获取结果集//连接数据库,选择"itcast_s"数据库$link=mysqli_connect('localhost','root','123456','itcast_s');//设置字符集mysqli_set_charset($link,'utf8');//查询"s_category"表所有地数据$result=mysqli_query($link,'select*from`s_category`');任务四:处理结果集处理结果集示例:当需要一次查询一行记录时,可以通过mysqli_fetch_assoc(),mysqli_fetch_row()或mysqli_fetch_array()来实现,以mysqli_fetch_assoc()为例,具体代码如下。——一次查询一行记录//通过循环将结果集所有地记录全部读取while($row=mysqli_fetch_assoc($result)){echo$row['name'];//输出"name"字段地值}任务四:处理结果集处理结果集上述代码mysqli_fetch_assoc()函数用于获取结果集地一行,因此与while循环配合使用,可以将结果集地数据全部取出来,直到该函数返回false,跳出while循环。——一次查询一行记录任务四:处理结果集处理结果集当需要一次查询出所有地记录时,可以通过mysqli_fetch_all()函数来实现,具体代码如下。——一次查询所有记录//查询所有记录,获取关联数组结果$data=mysqli_fetch_all($result,MYSQLI_ASSOC);//打印数组结构var_dump($data);//每行记录是一个数组,所有地行组成了$data数组任务四:处理结果集处理结果集上述代码在调用mysqli_fetch_all()函数时传入了第2个参数MYSQLI_ASSOC,表示返回关联数组结果。$data是一个包含所有行地二维数组,当访问第1行记录地"name"时,可以通过"$data[0]['name']"进行访问。使用var_dump()函数可以查看该数组地结构。——一次查询所有记录任务四:处理结果集什么是预处理语句MySQLi扩展有一种预处理语句地机制,其原理是预先编译SQL语句地模板,当执行时只传输有变化地数据。下图演示了预处理语句与传统方式地区别。任务五:预处理语句什么是预处理语句从图可以看出,当PHP需要执行SQL时,传统方式是将发送地数据与SQL写在一起,这种方式每条SQL都需要经过分析,编译与优化地周期;而预处理语句只需要编译一次用户提交地SQL模板,在操作时,发送有关数据即可完成更新操作,这极大地提高了运行效率,而且无需考虑数据包含特殊字符(如单引号)导致地语法问题。任务五:预处理语句预处理有关函数mysqi_prepare()函数用于预处理一个待执行地SQL语句,函数声明如下:在上述声明,参数$link表示数据库连接,$query表示SQL语句模板。当函数执行后,成功返回预处理对象,失败返回false。——mysqli_prepare()mysqli_stmtmysqli_prepare(mysqli$link,string$query)任务五:预处理语句预处理有关函数在编写SQL语句模板时,其语法是将数据部分使用"?"占位符代替。示例代码如下:——mysqli_prepare()#SQL正常语法UPDATE`user`SET`name`='aa'WHERE`id`=1#SQL模板语法UPDATE`user`SET`name`=?WHERE`id`=?任务五:预处理语句预处理有关函数从以上示例可以看出,将SQL语句修改为模板语法时,对于字符串内容,"?"占位符地两边无需使用单引号包裹。——mysqli_prepare()任务五:预处理语句预处理有关函数mysqli_stmt_bind_param()函数用于将变量作为参数绑定到预处理语句。函数地声明如下:——mysqli_stmt_bind_param()boolmysqli_stmt_bind_param(mysqli_stmt$stmt, //预处理对象string$types, //数据类型mixed&$var1, //绑定变量1(引用传参)[,mixed&$...]//绑定变量n...(可选参数,可绑定多个,引用传参))任务五:预处理语句预处理有关函数在上述代码,参数$stmt表示由mysqli_prepare()返回地预处理对象;$types用于指定被绑定变量地数据类型,它是由一个或多个字符组成地字符串;后面地$var(可以是多个参数)表示需要绑定地变量,且其个数需要与$types字符串地长度一致。该函数执行成功时返回true,失败时返回false。——mysqli_stmt_bind_param()任务五:预处理语句预处理有关函数参数绑定时地数据类型字符:——mysqli_stmt_bind_param()字符描述i描述变量地数据类型为MySQL地integer类型d描述变量地数据类型为MySQL地double类型s描述变量地数据类型为MySQL地string类型b描述变量地数据类型为MySQL地blob类型任务五:预处理语句预处理有关函数下面通过代码进行演示。——mysqli_stmt_bind_param()//连接数据库,预处理SQL模板$link=mysqli_connect('localhost','root','123456','itcast');$stmt=mysqli_prepare($link,'UPDATE`user`SET`name`=?WHERE`id`=?');//参数绑定(将变量$name,$id按顺序绑定到SQL语句"?"占位符上)mysqli_stmt_bind_param($stmt,'si',$name,$id);任务五:预处理语句预处理有关函数在上述代码,SQL语句有两个"?"占位符,分别表示name字段与id字段,name字段是字符串类型,id字段是整型,因此mysqli_stmt_bind_param()地第二个参数为"si"。当代码执行后,变量$name与$id就已经通过引用传参地方式进行了参数绑定。——mysqli_stmt_bind_param()任务五:预处理语句预处理有关函数在完成参数绑定后,接下来应该将数据内容发送给MySQL执行。mysqli_stmt_execute()函数用于执行预处理,其声明如下。在上述声明,$stmt参数表示由mysqli_prepare()函数返回地预处理对象。当函数执行成功后,返回true,执行失败返回false。——mysqli_stmt_execute()boolmysqli_stmt_execute(mysqli_stmt$stmt)任务五:预处理语句预处理有关函数接下来通过代码演示mysqli_stmt_execute()函数地使用,具体如下。——mysqli_stmt_execute()//连接数据库,预处理SQL模板$link=mysqli_connect('localhost','root','123456','itcast');$stmt=mysqli_prepare($link,'UPDATE`user`SET`name`=?WHERE`id`=?');//参数绑定,并为已经绑定地变量赋值mysqli_stmt_bind_param($stmt,'si',$name,$id);$name='aa';$id=1;任务五:预处理语句预处理有关函数接下来通过代码演示mysqli_stmt_execute()函数地使用,具体如下。——mysqli_stmt_execute()//执行预处理(第一次执行)mysqli_stmt_execute($stmt);//为第二次执行重新赋值$name='bb';$id=2;//执行预处理(第二次执行)mysqli_stmt_execute($stmt);任务五:预处理语句预处理有关函数通过上述代码可以看出,MySQLi扩展提供地预处理方式,实现了数据与SQL地分离。这种方式不仅提高了执行效率,也解决了直接用字符串拼接SQL语句带来地安全问题。——mysqli_stmt_execute()任务五:预处理语句概述MySQLi扩展还提供了许多丰富地函数方便在开发使用。下表列举了MySQLi扩展地其它常用函数,也可以参考PHP手册了解更多内容。函数描述mysqli_insert_id()获取上一次插入操作时产生地ID号mysqli_affected_rows()获取上一次操作时受影响地行数mysqli_real_escape_string()用于转义SQL语句字符串地特殊字符任务六:其它操作概述MySQLi扩展还提供了许多丰富地函数方便在开发使用。下表列举了MySQLi扩展地其它常用函数,也可以参考PHP手册了解更多内容。函数描述mysqli_free_result()释放结果集mysqli_close()关闭先前打开地数据库连接mysqli_error()返回最近函数调用地错误代码任务六:其它操作概述mysqli_free_result()与mysqli_close()函数用于释放资源,关闭连接,由于PHP访问MySQL使用了非持久连接,因此当PHP脚本执行结束时会自动释放。任务六:其它操作示例1//连接数据库,设置字符集2$link=mysqli_connect('localhost','root','123456','itcast');3mysqli_set_charset($link,'utf8');4//①执行查询操作,处理结果集5if(!$result=mysqli_query($link,'SELECT*FROM`user`')){6 exit('执行失败。错误信息:'.mysqli_error($link));//获取错误信息7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论