PHP操作MySQL数据库课件.ppt
第8章 PHP操作MySQL数据库,MySQL的安装与使用PHP访问MySQL基本步骤,MySQLi扩展预处理与参数绑定,目录,PHP访问MySQL,MySQLi扩展的使用,预处理和参数绑定,8.1 MySQL的安装和使用,数据库概述,数据库(Database)简称DB,是按照数据结构来组织、存储和管理数据的仓库,其本身可看作电子化的文件柜,用户可以对文件中的数据进行增加、删除、修改、查找等操作。,8.1 MySQL的安装和使用,数据库概述,数据库管理系统(Database Management System,简称DBMS)是数据库系统的核心,是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,以及保证数据库的安全性和完整性。,8.1 MySQL的安装和使用,数据库概述,随着数据库技术的不断发展,数据库产品越来越多,常见的有Oracle、SQL Server、MySQL等,它们各自的特点如下所述。,8.1 MySQL的安装和使用,数据库概述,Oracle数据库是Oracle公司推出的数据库管理系统,在数据库领域一直处于领先地位是目前世界上流行的关系型数据库管理系统之一优势在于移植性好、使用方便、功能性强,适用于各类大、中、小、微机环境。对于要求高效率、吞吐量大的项目而言是一个不错的选择。,8.1 MySQL的安装和使用,数据库概述,SQL Server是Microsoft公司推出的关系型数据库管理系统广泛应用于电子商务、银行、保险、电力等行业优点,易操作、界面良好等特点深受广大用户喜爱缺点,只能在Windows平台上运行,并对操作系统的稳定性要求较高,8.1 MySQL的安装和使用,数据库概述,MySQL数据库是开放源码的关系型数据库管理系统。由瑞典MySQL AB公司开发,先后被Sun和Oracle公司收购。是最受欢迎的关系型数据库之一,尤其是在Web开发领域,MySQL依然占据着举足轻重的地位。,8.1 MySQL的安装和使用,数据库概述,MySQL数据库低成本:开源的,开发人员可根据需求自由进行修改,降低了开发成本跨平台:可在Windows、Linux、Mac OS等多达14种平台上使用。高性能:多线程以及SQL算法的设计,使其可充分利用CPU资源和提高查询速度上手快:MySQL使用标准的SQL数据语言形式,方便用户操作。API接口:提供多种编程语言的API,方便操作数据库。例如Java、C、PHP等。,8.1 MySQL的安装和使用,获取MySQL,打开MySQL的官方网站“https:/”获取软件的下载。在网站中找到“Downloads”下载页面,可以看到MySQL各种版本的下载地址。,8.1 MySQL的安装和使用,获取MySQL,MySQL主要提供了企业版(Enterprise)和社区版(Community)产品社区版是通过GPL协议授权的开源软件,可以免费使用企业版是需要收费的商业软件,8.1 MySQL的安装和使用,获取MySQL,本书选择MySQL社区版进行讲解,在下载页面找到“MySQL Community Server”版本进行下载。,8.1 MySQL的安装和使用,命令安装方式解压文件,创建“C:webmysql5.7”作为MySQL的安装目录打开“mysql-5.7.17-win32.zip”压缩包,将里面的“mysql-5.7.17-win32”目录中的文件解压到“C:webmysql5.7”路径下。,8.1 MySQL的安装和使用,命令安装方式解压文件,需要重点关注“bin”目录和“my-default.ini”文件。“bin”是MySQL的应用程序目录,保存了MySQL的服务程序“mysqld.exe”、命令行工具“mysql.exe”等“my-default.ini”是MySQL的默认配置文件,用于保存默认设置,8.1 MySQL的安装和使用,命令安装方式配置MySQL,在安装MySQL前,先进行基本的配置。将默认配置文件“my-default.ini”复制一份,命名为“my.ini”打开“my.ini”,找到如下配置项进行修改:,8.1 MySQL的安装和使用,命令安装方式配置MySQL,basedir表示MySQL的安装目录datadir表示数据库文件的保存目录port表示访问MySQL服务的端口号MySQL数据库的默认端口号为3306,8.1 MySQL的安装和使用,命令安装方式安装MySQL,MySQL安装是指将MySQL安装为Windows系统的服务项,可以通过MySQL的服务程序“mysqld.exe”来进行安装,具体步骤如下:,8.1 MySQL的安装和使用,命令安装方式安装MySQL,执行【开始】菜单-【所有程序】-【附件】,找到【命令提示符】并单击鼠标右键,在弹出的快捷菜单中选择【以管理员身份运行】方式,启动命令行窗口。在命令模式下,切换到MySQL安装目录下的bin目录。,8.1 MySQL的安装和使用,命令安装方式安装MySQL,输入以下命令开始安装。,默认情况下,MySQL将自动读取安装目录下的“my.ini”配置文件。值得一提的是,如果需要卸载MySQL服务,可以使用“mysqld.exe-remove”命令进行卸载。,8.1 MySQL的安装和使用,命令安装方式启动MySQL服务,(1)初始化数据库在安装MySQL后,数据文件目录“c:webmysql5.7data”还没有创建。因此,接下来要通过MySQL的初始化功能,自动创建数据文件目录。具体命令如下:,“-initialize”表示初始化数据库“-insecure”表示忽略安全性。当省略“-insecure”时,MySQL将自动为默认用户“root”生成一个随机的复杂密码,而加上时,“root”用户的密码为空。,8.1 MySQL的安装和使用,命令安装方式启动MySQL服务,(2)管理MySQL服务MySQL安装后,就可以作为Windows的服务项进行启动或关闭了,通过Windows的系统的【控制面板】-【管理工具】-【服务】对MySQL服务进行管理,也可以使用如下命令实现。,8.1 MySQL的安装和使用,命令安装方式启动MySQL服务,(2)管理MySQL服务,8.1 MySQL的安装和使用,MySQL命令行工具MySQL登录与密码设置,无密码登录,8.1 MySQL的安装和使用,MySQL命令行工具MySQL登录与密码设置,“-h localhost”表示登录的服务器主机地址为localhost(本地服务器),可换成服务器的IP地址,如127.0.0.1,也可以省略,MySQL在默认情况下会自动访问本地服务器“-u root”表示以“root”用户的身份登录退出MySQL可以直接使用“exit”或“quit”命令退出登录,8.1 MySQL的安装和使用,MySQL命令行工具MySQL登录与密码设置,为了保护数据库的安全,需要为登录MySQL服务器的用户需要设置密码。下面以设置root用户的密码为例,具体执行的命令如下。,“localhost”主机中的“root”用户设置密码,密码为“123456”。当设置密码后,退出MySQL,然后重新登录时,就需要输入刚才设置的密码。,8.1 MySQL的安装和使用,MySQL命令行工具MySQL登录与密码设置,在登录有密码的用户时,需要使用的命令如下。,“-p123456”表示使用密码“123456”进行登录。如果在登录时不希望被直接看到密码,可以省略“-p”后面的密码,然后按回车键,MySQL会提示输入密码,并且在输入时不会回显。,有密码登录,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(1)数据库管理数据库的管理主要包括查看数据库、创建数据库、选择数据库和删除数据库。,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(1)数据库管理在创建和删除指定数据库时,为了防止创建的数据库已存在或删除的数据库不存在,导致程序报错,可以在操作的数据库名称前添加“IF NOT EXISTS”或“IF EXISTS”。,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(2)创建数据表数据表是数据库中最基本的数据对象,用于存放数据。要选择数据库,确定是在哪个数据库中创建的数据表要根据项目需求创建数据表才能对数据表中的数据进行具体操作,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(2)创建数据表,创建并选择数据库,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(2)创建数据表,创建学生信息表,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(3)数据表的管理对于已建数据表,可以查看表结构、修改表结构,或者删除不需要的数据表。,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(4)数据管理添加数据,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(4)数据管理查询数据,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(4)数据管理查询数据FROM用于指定待查询的数据表WHERE用于指定查询条件IN关键字用于判断某个字段的值是否在指定集合中LIKE用于模糊查询,“%”表示一个或多个字符ORDER BY用于将查询结果按照指定字段进行排序,ASC表示升序,DESC表示降序 LIMIT用于限定查询结果GROUP BY用于按照指定字段进行分组查询,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(4)数据管理修改数据例如,将学生信息表中学号为6的学生改名为Tess,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(4)数据管理删除数据在数据库中,若有些数据已经失去意义或者错误时,就需要将它们删除。,8.1 MySQL的安装和使用,MySQL命令行工具MySQL的基本使用,(4)数据管理删除数据DELETE和TRUNCATE的区别前者可以加上WHERE子句,只删除满足条件的部分记录,再次向表中添加记录时,不影响自动增长值;后者只能用于清空表中的所有记录,且再次向表中添加记录时,自动增加字段的默认初始值将重新由1开始。,8.2 PHP访问MySQL,PHP的相关扩展,PHP作为一门编程语言,其本身并不具备操作数据库的功能。因此,若想要在项目开发中,完成PHP应用和MySQL数据库之间的交互,则需借助PHP提供的数据库扩展。,MySQL扩展,MySQLi扩展,PDO扩展,8.2 PHP访问MySQL,PHP的相关扩展MySQL扩展,是针对MySQL 4.1.3或更早版本设计的PHP与MySQL数据库交互的早期扩展由于其不支持MySQL数据库服务器的新特性,且安全性差并且在PHP 7中,已经彻底淘汰了MySQL扩展,8.2 PHP访问MySQL,PHP的相关扩展MySQLi扩展,MySQLi扩展是MySQL扩展的增强版不仅包含所有MySQL扩展的功能函数,还可使用MySQL新版本中的高级特性例如,多语句执行和事务的支持,预处理方式解决了SQL注入问题等。只支持MySQL数据库,如果不考虑其他数据库,该扩展是一个非常好的选择,8.2 PHP访问MySQL,PHP的相关扩展MySQLi扩展,虽然MySQLi扩展默认情况下已经安装,但使用时还需要开启。打开PHP的配置文件php.ini,找到如下一行配置取消注释,然后重新启动Apache服务使配置生效。,8.2 PHP访问MySQL,PHP的相关扩展PDO扩展,PDO是PHP Data Objects(PHP数据对象)的简称它提供了一个统一的API接口,只要修改其中的DSN(数据源),就可以实现PHP应用与不同类型数据库服务器之间的交互解决了早期PHP版本中,不同数据库扩展的应用程序接口互不兼容的特点,提高了程序的可维护性和可移植性,8.2 PHP访问MySQL,PHP访问MySQL的基本步骤,提问:通过前面的学习,要实现MySQL数据库的操作需要有哪几个步骤?答案:首先需要启动MySQL数据库服务器,输入用户名和密码;然后选择要操作的数据库,执行具体SQL语句,获取到结果。思考:在PHP应用中,要想完成与MySQL服务器的交互,需要哪些步骤呢?,8.2 PHP访问MySQL,PHP访问MySQL的基本步骤,8.3 MySQLi扩展的使用,连接数据库,MySQLi扩展为PHP与数据库的连接提供了mysqli_connect()函数,8.3 MySQLi扩展的使用,连接数据库,函数共有6个可选参数,省略时将自动使用php.ini中配置的默认值连接成功时,该函数返回一个表示数据库连接的对象连接失败时,函数返回false,并提示Warning级错误信息参数$socket表示mysql.sock文件路径(用于Linux环境),通常不需要手动设置,具体案例请参考教材,8.3 MySQLi扩展的使用,执行SQL语句,在MySQLi扩展中,通常使用mysqli_query()函数发送SQL语句,获取执行结果。,$link表示通过mysqli_connect()函数获取的数据库连接$query表示SQL语句,8.3 MySQLi扩展的使用,执行SQL语句,执行SELECT、SHOW、DESCRIBE或EXPLAIN查询时,返回值是查询结果集,而执行其他查询,执行成功返回true,否则返回false。此外,可选参数$resultmode表示结果集模式,其值可以是以下两种常量。MYSQLI_STORE_RESULT模式:会将结果集全部读取到PHP端MYSQLI_USE_RESULT模式:仅初始化结果集检索,在处理结果集时进行数据读取。,具体案例请参考教材,8.3 MySQLi扩展的使用,处理结果集,函数mysqli_query()在执行SELECT、SHOW、EXPLAIN或DESCRIBE的SQL语句后,返回的是一个资源类型的结果集。因此,需使用函数从结果集中获取信息。,8.3 MySQLi扩展的使用,处理结果集,函数mysqli_fetch_all()和mysqli_fetch_array()的返回值,都支持关联数组和索引数组两种形式第1个参数表示结果集第2个参数是可选参数,用于设置返回的数组形式,其值是一个常量,8.3 MySQLi扩展的使用,处理结果集,函数mysqli_fetch_all()和mysqli_fetch_array()的返回常量。MYSQLI_ASSOC:表示返回的结果是一个关联数组MYSQLI_NUM:表示返回的结果是一个索引数组MYSQLI_BOTH:表示返回的结果中包含关联和索引数组,该常量为默认值,具体案例请参考教材,8.3 MySQLi扩展的使用,其他操作函数,MySQLi扩展不仅为PHP连接数据库、执行SQL语句提供了函数,还为方便开发提供很多其他常用的操作函数。例如,获取插入操作时产生的ID号、SQL语句中特殊字符的转义等。,8.3 MySQLi扩展的使用,其他操作函数,mysqli_free_result()函数用于释放结果集占用的系统内存资源mysqli_close()函数用于释放打开的数据库连接,具体案例请参考教材,8.4 预处理和参数绑定,什么是预处理,PHP执行SQL传统方式是将发送的数据和SQL写在一起,这种方式每条SQL都需要经过分析、编译和优化的周期;预处理方式则是预先编译一次用户提交的SQL模板,在操作时,发送相关数据即可完成更新操作,这极大地提高了运行效率,而且无需考虑数据中包含特殊字符(如单引号)导致的语法问题。,8.4 预处理和参数绑定,什么是预处理,实现SQL语句的预处理首先需要预处理一个待执行的SQL语句模板然后为该模板进行参数绑定最后将用户提交的数据内容发送给MySQL执行,完成预处理的执行,8.4 预处理和参数绑定,预处理的实现预处理SQL模板,mysqi_prepare()函数用于预处理一个待执行的SQL语句,参数$link表示数据库连接$query表示SQL语句模板当函数执行后,成功时返回预处理对象,失败时返回false。,8.4 预处理和参数绑定,预处理的实现预处理SQL模板,在编写SQL语句模板时,其语法是将数据部分使用“?”占位符代替。,SQL语句模板语法,对于字符串内容,“?”占位符的两边无需使用引号包裹。,8.4 预处理和参数绑定,预处理的实现模板的参数绑定,mysqli_stmt_bind_param()函数用于将变量作为参数绑定到预处理语句中。,8.4 预处理和参数绑定,预处理的实现模板的参数绑定,$stmt表示由mysqli_prepare()函数返回的预处理对象$types用于指定被绑定变量的数据类型,它是由一个或多个字符组成的字符串$var(可以是多个参数)表示需要绑定的变量,且其个数必须与$types字符串的长度一致该函数执行成功时返回true,失败时返回false,8.4 预处理和参数绑定,预处理的实现模板的参数绑定,参数绑定时的数据类型字符,8.4 预处理和参数绑定,预处理的实现模板的参数绑定,为了更好地理解mysqli_stmt_bind_param()函数的使用方法。,8.4 预处理和参数绑定,预处理的实现模板的参数绑定,SQL语句中有两个“?”占位符,分别表示name字段和id字段name字段是字符串类型,id字段是整型因此,函数mysqli_stmt_bind_param()的第2个参数为“si”当代码执行后,变量$name和$id就已经通过引用传参的方式进行了参数绑定,8.4 预处理和参数绑定,预处理的实现实现预处理的执行,在完成参数绑定后,接下来应该将数据内容发送给MySQL执行。mysqli_stmt_execute()函数用于执行预处理,其声明如下。,$stmt参数表示由mysqli_prepare()函数返回的预处理对象函数执行成功返回true,执行失败返回false,具体案例请参考教材,