1、 PHP第8章 PHP操作MySQL数据库MySQL的安装与使用PHP访问MySQL基本步骤MySQLi扩展预处理与参数绑定 目录PHP访问MySQL8.28.28.18.1MySQL的安装和使用MySQLi扩展的使用8.38.3预处理和参数绑定8.48.4 8.1 MySQL的安装和使用1.数据库概述数据库数据库(Database)简称DB,是按照数据结构来组织、存储和管理数据的仓库,其本身可看作电子化的文件柜,用户可以对文件中的数据进行增加、删除、修改、查找等操作。 8.1 MySQL的安装和使用1.数据库概述数据库管理系统数据库管理系统(Database Management Syste
2、m,简称DBMS)是数据库系统的核心,是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,以及保证数据库的安全性和完整性。 8.1 MySQL的安装和使用1.数据库概述随着数据库技术的不断发展,数据库产品越来越多,常见的有Oracle、SQL Server、MySQL等,它们各自的特点如下所述。 8.1 MySQL的安装和使用1.数据库概述Oracle数据库数据库l 是Oracle公司推出的数据库管理系统,在数据库领域一直处于领先地位l 是目前世界上流行的关系型数据库管理系统之一l 优势在于移植性好、使用方便、功能性强,适用于各类大、中、小、微机环境。对于要求高效率、吞吐量大的项目而
3、言是一个不错的选择。 8.1 MySQL的安装和使用1.数据库概述SQL Serverl 是Microsoft公司推出的关系型数据库管理系统l 广泛应用于电子商务、银行、保险、电力等行业l 优点,易操作、界面良好等特点深受广大用户喜爱l 缺点,只能在Windows平台上运行,并对操作系统的稳定性要求较高 8.1 MySQL的安装和使用1.数据库概述MySQL数据库数据库l 是开放源码的关系型数据库管理系统。l 由瑞典MySQL AB公司开发,先后被Sun和Oracle公司收购。l 是最受欢迎的关系型数据库之一,尤其是在Web开发领域,MySQL依然占据着举足轻重的地位。 8.1 MySQL的安
4、装和使用1.数据库概述MySQL数据库数据库l 低成本:开源的,开发人员可根据需求自由进行修改,降低了开发成本l 跨平台:可在Windows、Linux、Mac OS等多达14种平台上使用。l 高性能:多线程以及SQL算法的设计,使其可充分利用CPU资源和提高查询速度l 上手快:MySQL使用标准的SQL数据语言形式,方便用户操作。l API接口:提供多种编程语言的API,方便操作数据库。例如Java、C、PHP等。 8.1 MySQL的安装和使用2.获取MySQL打开MySQL的官方网站“https:/”获取软件的下载。在网站中找到“Downloads”下载页面,可以看到MySQL各种版本的
5、下载地址。 8.1 MySQL的安装和使用2.获取MySQLMySQL主要提供了企业版(企业版(Enterprise)和社区版(社区版(Community)产品l 社区版是通过GPL协议授权的开源软件,可以免费使用l 企业版是需要收费的商业软件 8.1 MySQL的安装和使用2.获取MySQL本书选择MySQL社区版社区版进行讲解,在下载页面找到“MySQL Community Server”版本进行下载。 8.1 MySQL的安装和使用3.命令安装方式解压文件l 创建“C:webmysql5.7”作为MySQL的安装目录的安装目录l 打开“mysql-5.7.17-win32.zip”压缩包
6、,将里面的“mysql-5.7.17-win32”目录中的文件解压文件解压到“C:webmysql5.7” 路径下。 8.1 MySQL的安装和使用3.命令安装方式解压文件需要重点关注需要重点关注 “bin”目录和目录和“my-default.ini”文件文件。l “bin”是MySQL的应用程序目录,保存了MySQL的服务程序“mysqld.exe”、命令行工具“mysql.exe”等l “my-default.ini”是MySQL的默认配置文件,用于保存默认设置 8.1 MySQL的安装和使用3.命令安装方式配置MySQL在安装在安装MySQL前,先进行基本的配置前,先进行基本的配置。l
7、将默认配置文件“my-default.ini”复制一份,命名为“my.ini”l 打开“my.ini”,找到如下配置项进行修改: 8.1 MySQL的安装和使用3.命令安装方式配置MySQLbasedir = C:/web/mysql5.7datadir = C:/web/mysql5.7/dataport = 3306l basedir表示MySQL的安装目录l datadir表示数据库文件的保存目录l port表示访问MySQL服务的端口号l MySQL数据库的默认端口号为3306 8.1 MySQL的安装和使用3.命令安装方式安装MySQLMySQL安装是指将MySQL安装安装为Wind
8、ows系统的服务项,可以通过MySQL的服务程序“mysqld.exe”来进行安装,具体步骤如下: 8.1 MySQL的安装和使用3.命令安装方式安装MySQL 执行【开始开始】菜单菜单-【所有程序所有程序】-【附件附件】,找到,找到【命令提示符命令提示符】并单击鼠标右键,在弹出的快捷菜单中选择【以管理员身份运行以管理员身份运行】方式,启动命令行窗口。在命令模式下,切换到MySQL安装目录下的bin目录目录。cd C:webmysql5.7bin 8.1 MySQL的安装和使用3.命令安装方式安装MySQL输入以下命令开始安装开始安装。mysqld.exe -install 默认情况下,MyS
9、QL将自动读取安装目录下的“my.ini”配置文件。 值得一提的是,如果需要卸载MySQL服务,可以使用“mysqld.exe -remove”命令进行卸载。 8.1 MySQL的安装和使用3.命令安装方式启动MySQL服务(1)初始化数据库初始化数据库在安装MySQL后,数据文件目录“c:webmysql5.7data”还没有创建。因此,接下来要通过MySQL的初始化功能,自动创建数据文件目录。具体命令如下:mysqld.exe -initialize-insecure “-initialize”表示初始化数据库 “-insecure”表示忽略安全性。当省略“-insecure”时,MySQ
10、L将自动为默认用户“root”生成一个随机的复杂密码,而加上时,“root”用户的密码为空。 8.1 MySQL的安装和使用3.命令安装方式启动MySQL服务(2)管理管理MySQL服务服务MySQL安装后,就可以作为Windows的服务项进行启动或关闭了,通过Windows的系统的【控制面板控制面板】-【管理工具管理工具】-【服务服务】对MySQL服务进行管理,也可以使用如下命令实现。 8.1 MySQL的安装和使用3.命令安装方式启动MySQL服务(2)管理管理MySQL服务服务net start MySQL # 启动“MySQL”服务net stop MySQL # 停止“MySQL”服
11、务net restart MySQL # 重新启动“MySQL”服务 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL登录与密码设置无密码登录 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL登录与密码设置l “-h localhost”表示登录的服务器主机地址为localhost(本地服务器),可换成服务器的IP地址,如127.0.0.1, 也可以省略,MySQL在默认情况下会自动访问本地服务器l “-u root”表示以“root”用户的身份登录l 退出MySQL可以直接使用“exit”或或“quit”命令退出登录 8.1 MySQL的安装和使用4.MySQ
12、L命令行工具MySQL登录与密码设置为了保护数据库的安全保护数据库的安全,需要为登录MySQL服务器的用户需要设置密码设置密码。下面以设置root用户的密码为例,具体执行的命令如下。SET PASSWORD FOR rootlocalhost = PASSWORD(123456); “localhost”主机中的“root”用户设置密码,密码为“123456”。 当设置密码后,退出MySQL,然后重新登录时,就需要输入刚才设置的密码。 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL登录与密码设置在登录有密码的用户登录有密码的用户时,需要使用的命令如下。mysql h loca
13、lhost -u root -p123456 “-p123456”表示使用密码“123456”进行登录。 如果在登录时不希望被直接看到密码,可以省略“-p”后面的密码,然后按回车键,MySQL会提示输入密码,并且在输入时不会回显。有密码登录 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(1)数据库管理数据库管理数据库的管理主要包括查看数据库、创建数据库、选择数据库和删除数据库。功能功能示例示例描述描述查看数据库SHOW DATABASES;显示MySQL数据库服务器中已有的数据库创建数据库CREATE DATABASE itheima;创建一个名称为itheima
14、的数据库选择数据库USE itheima;选择数据库itheima进行操作删除数据库DROP DATABASE itheima;删除数据库itheima 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(1)数据库管理数据库管理在创建和删除指定数据库时,为了防止创建的数据库已存在或删除的数据库不存在,导致程序报错,可以在操作的数据库名称前添加“IF NOT EXISTS”或“IF EXISTS”。CREATE DATABASE IF NOT EXISTS itheima;DROP DATABASE IF EXISTS itheima; 8.1 MySQL的安装和使用4
15、.MySQL命令行工具MySQL的基本使用 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(2)创建数据表创建数据表数据表是数据库中最基本的数据对象,用于存放数据。l 要选择数据库,确定是在哪个数据库中创建的数据表l 要根据项目需求创建数据表l 才能对数据表中的数据进行具体操作 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(2)创建数据表创建数据表CREATE DATABASE IF NOT EXISTS itheima;USE itheima;创建并选择数据库 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用
16、(2)创建数据表创建数据表CREATE TABLE IF NOT EXISTS student ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 学号, name VARCHAR(32) NOT NULL COMMENT 姓名, gender ENUM(男, 女) DEFAULT 男 NOT NULL COMMENT 性别) DEFAULT CHARSET=utf8;创建学生信息表 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用功能功能示例示例INT常规整数,有符号取值范围:-231231-1,无符号取值范围:
17、0232-1VARCHAR(32)用于表示可变长度的字符串,最多保存32个字符ENUM(男,女)枚举类型,其值只能男或女UNSIGNED用于设置字段数据类型是无符号的PRIMARY KEY用于设置主键,唯一标识表中的某一条记录AUTO_INCREMENT用于表示自动增长,每增加一条记录,该字段会自动加1NOT NULL表示该字段不允许出现NULL值DEFAULT用于设置字段的默认值DEFAULT CHARSET=utf8用于设置该表的默认字符编码为“utf8”COMMENT用于表示注释内容 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(3)数据表的管理数据表的管理
18、对于已建数据表,可以查看表结构、修改表结构,或者删除不需要的数据表。 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用功能功能示例示例描述描述查看数据表SHOW TABLES;查看数据库中已有的表查看表结构DESC student;查看指定表的字段信息DESC student name;查看指定表的某一列信息SHOW CREATE TABLE studentG查看数据表创建语句和字符编码SHOW COLUMNS FROM student;查看表的结构修改表结构ALTER TABLE student ADD area VARCHAR(100);添加字段 8.1 MySQ
19、L的安装和使用4.MySQL命令行工具MySQL的基本使用功能功能示例示例描述描述修改表结构ALTER TABLE student CHANGE area desc CHAR(50);修改字段名称ALTER TABLE student MODIFY desc VARCHAR(255);修改字段类型ALTER TABLE student DROP desc;删除指定字段ALTER TABLE student RENAME stu;修改数据表名称重命名RENAME TABLE stu TO student; 将名字为stu的表重命名为student删除数据表DROP TABLE IF EXISTS
20、 student;删除存在的数据表student 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(4)数据管理添加数据添加数据# 指定字段插入INSERT INTO student (name, gender) VALUES (Tom, 男), (Lucy, 女), (Jimmy, 男), (Amy, 女);# 省略字段插入INSERT INTO student VALUES (NULL, Elma, 女), (NULL, Ruth, 女); 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(4)数据管理查询数据查询数据SELECT * F
21、ROM student;# 查询表中所有数据SELECT name FROM student;# 查询表中指定字段SELECT * FROM student WHERE id=2;# 查询id等于2的学生信息SELECT * FROM student WHERE idIN(4,5);# 查询id为4或5的学生信息SELECT * FROM student WHERE NAME LIKE %y; # 查询名字以y结尾的学生信息SELECT * FROM student ORDER BY name ASC;# 将查询结果按照名字升序排序SELECT * FROM student LIMIT 1,
22、2;# 查询结果从第2个开始,至多有2个SELECT gender, COUNT(*) FROM student GROUP BY gender; # 按性别查询男女各有多少人 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(4)数据管理查询数据查询数据 FROM用于指定待查询的数据表 WHERE用于指定查询条件 IN关键字用于判断某个字段的值是否在指定集合中 LIKE用于模糊查询,“%”表示一个或多个字符 ORDER BY用于将查询结果按照指定字段进行排序,ASC表示升序,DESC表示降序 LIMIT用于限定查询结果 GROUP BY用于按照指定字段进行分组查询
23、8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(4)数据管理修改数据修改数据例如,将学生信息表中学号为6的学生改名为TessUPDATE student SET name=Tess WHERE id=6;# 有条件修改UPDATE student SET name=Tess;# 无条件修改 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(4)数据管理删除数据删除数据在数据库中,若有些数据已经失去意义或者错误时,就需要将它们删除。DELETE FROM student WHERE gender=女; # 删除部分数据DELETE FROM
24、student;# 删除全部数据TRUNCATE student;# 清空数据表 8.1 MySQL的安装和使用4.MySQL命令行工具MySQL的基本使用(4)数据管理删除数据删除数据DELETE和和TRUNCATE的区别的区别l 前者可以加上WHERE子句,只删除满足条件的部分记录,再次向表中添加记录时,不影响自动增长值;l 后者只能用于清空表中的所有记录,且再次向表中添加记录时,自动增加字段的默认初始值将重新由1开始。 8.2 PHP访问MySQL1.PHP的相关扩展PHP作为一门编程语言,其本身并不具备操作数据库的功能。因此,若想要在项目开发中,完成PHP应用和MySQL数据库之间的交
25、互,则需借助PHP提供的数据库扩展数据库扩展。MySQL扩展MySQLi扩展PDO扩展 8.2 PHP访问MySQL1.PHP的相关扩展MySQL扩展l 是针对MySQL 4.1.3或更早版本设计的PHP与MySQL数据库交互的早期扩展l 由于其不支持MySQL数据库服务器的新特性,且安全性差l 并且在PHP 7中,已经彻底淘汰了MySQL扩展 8.2 PHP访问MySQL1.PHP的相关扩展MySQLi扩展l MySQLi扩展是MySQL扩展的增强版l 不仅包含所有MySQL扩展的功能函数,还可使用MySQL新版本中的高级特性l 例如,多语句执行和事务的支持,预处理方式解决了SQL注入问题等
26、。l 只支持MySQL数据库,如果不考虑其他数据库,该扩展是一个非常好的选择 8.2 PHP访问MySQL1.PHP的相关扩展MySQLi扩展虽然MySQLi扩展默认情况下已经安装,但使用时还需要开启。打开PHP的配置文件php.ini,找到如下一行配置取消注释,然后重新启动Apache服务使配置生效。;extension=php_mysqli.dllphpinfo() 8.2 PHP访问MySQL1.PHP的相关扩展PDO扩展l PDO是PHP Data Objects(PHP数据对象)的简称l 它提供了一个统一的API接口,只要修改其中的DSN(数据源),就可以实现PHP应用与不同类型数据
27、库服务器之间的交互l 解决了早期PHP版本中,不同数据库扩展的应用程序接口互不兼容的特点,提高了程序的可维护性和可移植性 8.2 PHP访问MySQL2.PHP访问MySQL的基本步骤提问提问:通过前面的学习,要实现MySQL数据库的操作需要有哪几个步骤?答案答案: 首先需要启动MySQL数据库服务器,输入用户名和密码; 然后选择要操作的数据库,执行具体SQL语句,获取到结果。思考思考:在PHP应用中,要想完成与MySQL服务器的交互,需要哪些步骤呢? 8.2 PHP访问MySQL2.PHP访问MySQL的基本步骤 8.3 MySQLi扩展的使用1.连接数据库MySQLi扩展为PHP与数据库的
28、连接提供了mysqli_connect()函数mysqli mysqli_connect ( string $host = ini_get(mysqli.default_host), / 主机名或IP string $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
29、_get(mysqli.default_socket) / socket通信) 8.3 MySQLi扩展的使用1.连接数据库 函数共有6个可选参数,省略时将自动使用php.ini中配置的默认值 连接成功时,该函数返回一个表示数据库连接的对象 连接失败时,函数返回false,并提示Warning级错误信息 参数$socket表示mysql.sock文件路径(用于Linux环境),通常不需要手动设置具体案例请参考教材 8.3 MySQLi扩展的使用2.执行SQL语句在MySQLi扩展中,通常使用mysqli_query()函数发送SQL语句,获取执行结果。mixed mysqli_query (
30、mysqli $link, / 数据库连接 string $query, / SQL语句 int $resultmode = MYSQLI_STORE_RESULT/ 结果集模式(可选)) $link表示通过mysqli_connect()函数获取的数据库连接 $query表示SQL语句 8.3 MySQLi扩展的使用2.执行SQL语句执行SELECT、SHOW、DESCRIBE或或EXPLAIN查询时,返回值是查询结果集,而执行其他查询执行其他查询,执行成功返回true,否则返回false。此外,可选参数$resultmode表示结果集模式,其值可以是以下两种常量。 MYSQLI_STORE
31、_RESULT模式:会将结果集全部读取到PHP端 MYSQLI_USE_RESULT模式:仅初始化结果集检索,在处理结果集时进行数据读取。具体案例请参考教材 8.3 MySQLi扩展的使用3.处理结果集函数mysqli_query()在执行SELECT、SHOW、EXPLAIN或DESCRIBE的SQL语句后,返回的是一个资源类型的结果集。因此,需使用函数从结果集中结果集中获取信息。 8.3 MySQLi扩展的使用3.处理结果集函数名函数名描述描述mysqli_num_rows()获取结果中行的数量mysqli_fetch_all()获取所有的结果,并以数组方式返回mysqli_fetch_a
32、rray()获取一行结果,并以数组方式返回mysqli_fetch_assoc()获取一行结果并以关联数组返回mysqli_fetch_row()获取一行结果并以索引数组返回 函数mysqli_fetch_all()和mysqli_fetch_array()的返回值,都支持关联数组和索引数组两种形式 第1个参数表示结果集 第2个参数是可选参数,用于设置返回的数组形式,其值是一个常量 8.3 MySQLi扩展的使用3.处理结果集函数函数mysqli_fetch_all()和和mysqli_fetch_array()的的返回常量。返回常量。 MYSQLI_ASSOC:表示返回的结果是一个关联数组
33、MYSQLI_NUM:表示返回的结果是一个索引数组 MYSQLI_BOTH:表示返回的结果中包含关联和索引数组,该常量为默认值具体案例请参考教材 8.3 MySQLi扩展的使用4.其他操作函数MySQLi扩展不仅为PHP连接数据库、执行SQL语句提供了函数,还为方便开发提供很多其他常用的操作函数其他常用的操作函数。例如,获取插入操作时产生的ID号、SQL语句中特殊字符的转义等。 8.3 MySQLi扩展的使用4.其他操作函数函数名函数名描述描述mysqli_insert_id()获取上一次插入操作时产生的ID号mysqli_affected_rows()获取上一次操作时受影响的行数mysqli
34、_real_escape_string()用于转义SQL语句字符串中的特殊字符mysqli_error()返回最近函数调用的错误代码mysqli_free_result()释放结果集mysqli_close()关闭数据库连接 mysqli_free_result()函数用于释放结果集占用的系统内存资源 mysqli_close()函数用于释放打开的数据库连接具体案例请参考教材 8.4 预处理和参数绑定1.什么是预处理PHP执行执行SQLl 传统方式传统方式是将发送的数据和SQL写在一起,这种方式每条SQL都需要经过分析、编译和优化的周期;l 预处理方式预处理方式则是预先编译一次用户提交的SQL
35、模板,在操作时,发送相关数据即可完成更新操作,这极大地提高了运行效率,而且无需考虑数据中包含特殊字符(如单引号)导致的语法问题。 8.4 预处理和参数绑定1.什么是预处理 实现SQL语句的预处理 首先需要预处理一个待执行的SQL语句模板 然后为该模板进行参数绑定 最后将用户提交的数据内容发送给MySQL执行,完成预处理的执行 8.4 预处理和参数绑定2.预处理的实现预处理SQL模板mysqi_prepare()函数用于预处理一个待执行的SQL语句mysqli_stmt mysqli_prepare ( mysqli $link , string $query ) 参数$link表示数据库连接
36、$query表示SQL语句模板当函数执行后,成功时返回预处理对象,失败时返回false。 8.4 预处理和参数绑定2.预处理的实现预处理SQL模板在编写SQL语句模板时,其语法是将数据部分使用“?”占位符代替。# SQL正常语法UPDATE student SET name=Ileana WHERE id=1;# SQL模板语法UPDATE student SET name=? WHERE id=?;SQL语句模板语法,对于字符串内容,“?”占位符的两边无需使用引号包裹。 8.4 预处理和参数绑定2.预处理的实现模板的参数绑定mysqli_stmt_bind_param()函数用于将变量作为参
37、数绑定到预处理语句中。bool mysqli_stmt_bind_param (mysqli_stmt $stmt, / 预处理对象string $types, / 数据类型mixed &$var1, / 绑定变量1(引用传参), mixed&$. / 绑定变量n.(可选参数,可绑定多个,引用传参)) 8.4 预处理和参数绑定2.预处理的实现模板的参数绑定 $stmt表示由mysqli_prepare()函数返回的预处理对象 $types用于指定被绑定变量的数据类型,它是由一个或多个字符组成的字符串 $var(可以是多个参数)表示需要绑定的变量,且其个数必须与$types字符串的长度一致 该函
38、数执行成功时返回true,失败时返回false 8.4 预处理和参数绑定2.预处理的实现模板的参数绑定字符字符描述描述i描述变量的数据类型为MySQL中的integer类型d描述变量的数据类型为MySQL中的double类型s描述变量的数据类型为MySQL中的string类型b描述变量的数据类型为MySQL中的blob类型参数绑定时的数据类型字符 8.4 预处理和参数绑定2.预处理的实现模板的参数绑定为了更好地理解mysqli_stmt_bind_param()函数的使用方法。/ 连接数据库、设置字符集$link = mysqli_connect(localhost, root, 123456
39、, itheima);mysqli_set_charset($link, utf8);/ 预处理SQL模板$stmt = mysqli_prepare($link, UPDATE student SET name=? WHERE id=?);/ 参数绑定(将变量$name、$id按顺序绑定到SQL语句“?”占位符上)mysqli_stmt_bind_param($stmt, si, $name, $id); 8.4 预处理和参数绑定2.预处理的实现模板的参数绑定 SQL语句中有两个“?”占位符,分别表示name字段和id字段 name字段是字符串类型,id字段是整型 因此,函数mysqli_stmt_bind_param()的第2个参数为“si” 当代码执行后,变量$name和$id就已经通过引用传参的方式进行了参数绑定 8.4 预处理和参数绑定2.预处理的实现实现预处理的执行在完成参数绑定后,接下来应该将数据内容发送给MySQL执行。mysqli_stmt_execute()函数用于执行预处理,其声明如下。bool mysqli_stmt_execute ( mysqli_stmt $stmt ) $stmt参数表示由mysqli_prepare()函数返回的预处理对象 函数执行成功返回true,执行失败返回false具体案例请参考教材