MySQL数据库与PHP综合应用

一.管理MySQL

1.基础操作

(1)连接MySQL

打开命令行窗口模式(cmd)。进入mysql安装目录的bin。输入:mysql -u root -p

(2)查看MySQL数据库

用:show databases 来查看

(3)使用数据库

用:use 'data_name' 来进入数据库。

(4)查看数据库中的表

用:show tables; 来查看

(5)查看表的类型

用:show columns from 'table_name'; 来查看

(6)查看表的内容

select [字段] from 'table_name'; 来查看具体指定的内容

2.相关函数

函数

描述

user();

查看当前用户

version();

查看当前数据库版本

database();

数据库名

@@version_compile_os

操作系统

@@basedir

查看MySQL安装目录

二.MySQL数据库操作

1.创建/删除数据库

(1)使用 create database 'database_name' 命令创建数据库。

(2)使用 drop database 'database_name' 命令删除数据库

2.创建/删除数据表&数据类型

(1)创建数据表

使用 create table 'table_name'(); 来创建。创建时要在括号内设置属性字段与字段类型。

数据类型

描述

VARCHAR

字符串类型

TEXT

大文本

INT

整数型

FLOAT

浮点数值

创建的同时也可以为每个字段设置约束,例如主键等

约束

描述

AUTO_INCREMENT

表示自动增长

not_null

表示不能为空

primary key('')

表示主键

default

默认值

UNIQUE

标识该属性值是唯一的

(字段 字段类型 约束);

(3)查看表的结构

desc 'table_name';

各个字段的含义解释:filed字段名;Null表示该列可以存储NULL值;Key表示该列是否已编制索引。Default表示该列是否有默认值,如果有是多少;Extra表示可以获取的与给定列有关的附加信息,如AUTO_INCREMENT。

(4)删除数据表

用:drop table 'table_name'; 来删除

3.数据表的增删改查

(1)增加数据

使用:insert into 'table_name'(字段)values(值)

方法一:对应值添加到对应字段中

insert into 'table_name'(字段1,字段2,字段3)values(值1,只2,值3),values(.....);

如果添加的数据或值是字符串类型,需要使用单双引号。

方法二:直接添加,但是添加的值必须对应表中的字段

insert into 'table_name' values(...),values(....);

(2)查看数据

select [字段名] from ['table_name'];

可以使用 * 号来代替所有字段

设定返回的记录数 limit ;select [字段名] from ['table_name'] limit [开始索引],[查看条数];

该限制表示查询到的数据从第几行开始显示到几行。索引从0 开始。

添加限制条件 where

用select [字段值] from ['table_name'] where 条件表达式;

(3)修改数据

update 表名 set 字段名=字段值 where 条件表达式

如果不添加where限制条件。那么默认修改整个数据表该字段的值。

(4)删除数据

delete from 数据表名;

只想删除指定条目用where条件来判断

(5)逻辑运算符

and:查询时为了使查询结果更加准确,可以使用AND来连接两个或多个查询条件

or:OR只要满足其中一个条件就可被查询出来

and/or联用:AND优先级高于OR

(6)其他操作

查询表中的字段是否为空:select * from 表单名 where 字段 is null;

查询数据表中所有过滤重复值:select distinct 字段 from 表单名

查询表中字段:select * from 表单名 where 字段 like "%%/%s/s%"

对查询结果进行排序:select * from 表名 order by 字段 ASC升序/DESC降序;

进行分组查询:select * from 表名 group by 字段 相同字段中的值会被归类到一起

子查询:select * from 表名 where 字段=(select ....)

联合查询:union 注意前后查询的字段数量必须保持一致m

4.利用内置表进行查询

自带的表为内置表

information_schemata

存放着所有的数据库库名schema_name

information_tables

存放着所有数据库库名table_schema与数据表表名table_name

information_columns

存放着所有数据库库名table_schema,表名table_name,字段名与字段值column_name

三.数据库其他知识

1.算术运算符

运算符

作用

+

加法

-

减法

*

乘法

/或DIV

除法

%或MOD

取余

2.逻辑运算符

运算符号

作用

NOT 或 !

逻辑非

AND

逻辑与

OR

逻辑或

XOR

逻辑异或

3.注释符

/*。。。。*/ / --空格 / #

四.常见函数

函数

语法

描述

rand()

select rand()

生成0-1之间的随机数

floor()

select floor(1.1/rand())

向下取整

concat()

select concat(1,'a','b')

将数据进行拼接

concat_ws()

select concat(1,'~','a')

将数据进行拼接

sleep()

select sleep(2)

延时执行

length()

select length('asdasdf')

返回结果长度

substr()/mld()

select substr(字段,1,2)

截取从第一位到第二位

oscll()/ord()

select oscll(字段,1)

将结果转为ASC值

if()

select if(a,b,c)判断结果,成立返回b不成立返回c

条件判断

group_concat()

select group_concat(字段1,'~',字段2) from 表名

拼接查询结果显示

聚合函数

函数

语法

描述

COUNT()

select count(*) from 表名

返回某列的行数

SUM()

select sum(*) from 表名

返回某列的和

AVG()

select avg(*) from 表名

返回某列的平均值

MAX()

select max(*) from 表名

返回某列的最大值

MIN()

select min(*) from 表名

返回某列的最小值

读取load_file()函数

load_file()函数是MySQL读取本地/远程文件的函数

前提条件

必须有权限读取且⽂件是可读的,低权限⽆法读取⾼权限⽤⼾⽂件

必须知道⽂件的绝对路径 可⽤:select @@basedir;

secure_file_priv的值不为NULL 使⽤ show global variables like '%secure%'; ;\

查询是否为空,在my.ini设置为:secure_file_priv = ''

查询结果为:secure_file_priv NULL时,表⽰不允许导⼊导出;

查询结果为:secure_file_priv /xxx/时,表⽰只允许在当前⽬录导⼊导出;

查询结果为:secure_file_priv(空⽩)时,表⽰可以在任意⽬录进⾏导⼊导出;

写入into outfile()函数

在SQL注⼊时,我们可以利⽤load_file或者 into outfile()对⽂件进⾏读取,或者写⼊Webshell;

若过滤了单引号,则可以将函数中的字符进⾏hex编码。

五.PHP包含文件

1.介绍

(1)语法:include 文档名

作用:使用被包含的文件中的内容,实现代码的共享;自己的脚本内容可以给别的文件使用,实现代码的共享。

(2)文件的四种类型

include:生成一个告警,在错误后会继续执行。

include_once:系统会自动判断文件包含过程中,如果该文件已经被包含,则不会再次包含。

Require:生成一个致命错误,在错误发生后脚本会停止执行。

Require_once:与include_once相同。

2.函数的区别

(1)本质都是包含文件,唯一区别在于包含不到文件时候,报错形式不一样。

(2)include的错误级别较轻时;不会阻止代码的执行。

(3)Require要求较高;如果出现错误代码不再执行之后的代码。

3.文件包含路径

(1)绝对路径

(2)相对路径

六.PHP操作文件

readfile()函数读取文件,并把它写入输出缓冲。

1.fopen()函数

fopen()的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式

die()函数输出一条消息,并退出当前脚本

文件操作模式

模式

描述

r

打开文件只读。文件指针在文件的开头开始。

w

打开文件只写。删除文件的内容或者创建一个新的文件,如果它不存在。文件指针在文件的开头开始。

a

打开文件只写文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。

x

创建新文件为只写。返回 FALSE 和错误,如果文件已存在。

r+

打开文件为读/写、文件指针在文件开头开始。

w+

打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。

a+

打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。

x+

创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。

2.fread()函数

读取打开的文件。fread()的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。

3.fclose()函数

fclose() 函数用于关闭打开的文件。

fclose() 需要待关闭文件的名称(或者存有文件名的变量)

4.fgets()函数

fgets() 函数用于从文件读取单行。

Ps:调用 fgets() 函数之后,文件指针会移动到下一行

5.feof()函数

feof() 函数检查是否已到达 "end-of-file" (EOF)。

feof() 对于遍历未知长度的数据很有用

6.fgetc()函数

fgets() 函数用于从文件读取字符。

ps:在调用 fgetc() 函数之后,文件指针会移动到下一个字符

7.fwrite()函数

fwrite() 函数用于写入文件。

fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串

七.PHP操作MySQL

1.面向过程连接

(1)连接数据库

$conn = mysqli_connect($localhost,$username,$password,$dbname);

检查连接失败的报错信息:mysqli_connect_error();

(2)执行SQL语句

常用函数

函数

描述

mysqli_query(连接,sql语句)

执行SQL语句

mysqli_error(连接)

获取报错信息

mysqli_num_rows

函数返回结果集中行的数量

mysqli_fetch_assoc()

从结果集中取得一行作为关联数组

(2).1创建数据表

$sql="create table 表名(字段名,字段类型,约束)";

mysqli_query(连接,$sql);

检查错误:mysqli_error(连接);

(2).2插入数据

$sql="insert into 表名(字段名) values(值)";

mysqli_query(连接,$sql);

检查错误:mysqli_error(连接);

(2).3删除数据

$sql="delete from 表名 where 条件表达式";

mysqli_query(连接,$sql);

检查错误:mysqli_error(连接);

(2).4获取数据

$sql="select * from 表名";

$result=mysqli_query(连接,$sql);

mysqli_num_rows($result)返回执行结果的数量

$row=mysqli_fetch_assoc($result)数据结果

2.面向对象连接

(1)连接数据库

$conn = new mysqli($localhost,$username,$password,$dbname)

检错:$conn->connect_error

(2)执行SQL语句

函数

描述

连接->query($sql)

执行SQL语句

连接->connect_error

获取连接报错信息

连接->error

说去数据库报错信息

执行结果->num_rows

函数返回结果集中行的数量

执行结果->fetch_assoc()

从结果集中取得一行作为关联数组

(2).1创建数据表

$sql='create table 表名(字段,字段类型,约束)';

$conn->query($sql);

报错信息:$conn->error

(2).2插入数据

$sql='insert into 表名(字段)values(值)';

$conn->query($sql);

报错信息:$conn->error

(2).3删除数据

$sql='delete from 表名 where 条件表达式';

$conn->query($sql);

报错信息:$conn->error;

(2).4获取数据

$sql='select * from 表名';

$result=$conn->query($sql);

$result->num_rows;

$row=$result->fetch_assoc();

(3)小结

[连接对象] -> query //执行sql语句

[结果]->num_rows //判断是否有返回数据。

[结果]->fetch_assoc() //获取数据

[连接]->close(); //关闭连接

3.PDO连接

常用函数

函数

描述

try[正常代码]......catch[异常后的代码]

异常捕获get

getMessage();

获取异常错误并返回

$[数据库连接]->exec($SQL命令)

执行SQL命令

$[]->prepare($SQL命令)

预处理

$[]->execute()

执行预处理

fetch()

获取数据

$[连接]=null

关闭连接

(1)创建数据表

(2)插入数据

(3)获取数据

PDO连接

预处理可以防止 SQL 注入攻击: prepare 预处理语句可以有效地防止 SQL 注入攻击,因为它会 将 SQL查询字符串与参数分开处理 ,确保参数不会被解释为 SQL 代码的一部分。这有助于保护数据库免受恶意用户的攻击。

八.补充与小结

MySQL

  1. 连接MySQL数据库
Mysql -u  用户名 -p

基础命令

命令

解释

show databases

查看所有数据库

show tables

查看某数据库下所有表

use 数据库

使用数据库

user()

获取当前用户

version()

获取mysql版本信息

@@version_compile_os

查看当前操作系统

@@basedir

获取Mysql安装路径

database()

获取数据库名

常用函数

函数

语法

描述

rand()

select rand()

生成0-1之间的随机数

floor()

selet floor(rand())

向下取整

concat()

select concat(0x3a,database(),0x3a)

将数据进行拼接

concat_ws()

select concat_ws('',database(),'')

将数据进行拼接

sleep()

select sleep(5)

延时执行

length()

selec length(database())

返回结果得长度

substr()/mid()

select substr(user(),1,2);

截取结果从第1位到第2位

ascii()/ord()

select ascii(mid(user(),1));

将结果转换成ascii码

if()

select if(a,b,c)

条件判断

gourp_concat()

select group_concat(user,'~',city) from users;

拼接查询结果显示

extractvalue()

select extractvalue('anything',concat('~',(select user())));

对xml文档进行查询语法:extractvalue(目标文档,路径)

updatexml()

select updatexml('anything',concat('~',(select version())),'xxx');

updatexml(目标xml文档,xml路径,更新的内容)

函数

语法

描述

COUNT()

select count(*) from users;

返回某列的行数

SUM()

select SUM(user_id) from users;

返回某列值得和

AVG()

select AVG(user_id) from users;

返回某列得平均值

MAX()

select MAX(user_id) from users;

返回某列得最大值

MIN()

select MIN(user_id) from users;

返回某列得最小值

增删改查

  1. 创建数据库
  2. 删除数据库
  3. 创建数据表
  4. 删除数据表
create database 名字
drop database 名字
CREATE TABLE 表名(字段名 类型 AUTO_INCREMENT,字段1 类型1,字段2,类型2 ,PRIMARY KEY (主键));
drop table 表名

针对数据的增删改查

  1. 增加数据
  2. 删除数据
  3. 查询数据
  4. 更改数据
  5. 模糊匹配
  6. where条件
insert into 表名(字段名1,字段名2,字段名3)values(值1,值2,值3)
delete from 表名    			!!!谨慎使用,会删除表内全部信息
delete from 表名 where 条件    推荐使用
select  查询的字段(*代表所有) from 表名 
update set 字段名=字段值  from 表名 where 条件
select * from 表名 where 字段名 like %s%
查看表中(字段值)包含s字符串的数据
可以在语句后使用where 进行条件判断

其他知识点

or  左右两那边有一方满足即为真
and 左右两边全部满足即为真
union 联合查询   (条件:左右两边字段数量必须保持一致)
注释符 -- # /**/

读取函数 load_file()

写入函数into outfile() \ into dumpfile()

写入条件:
1. 必须高权限用户
2. 写入的目录必须有可写
3. secure_file_priv=''

PHP

构造函数
析构函数
超全局变量
文件包含函数
php操作mysql

PHP操作Mysql

-面向过程
    mysqli_connect() 		连接数据库
    mysqli_query() 			加载执行SQL语句
    mysqli_num_rows() 		判断是否由返回结果
    mysqli_connect_error() 	获取连接错误信息
    mysqli_error() 			获取报错信息
    mysqli_fetch_assoc() 	获取执行结果内容(以关联数组形式返回)

-面向对象
    [连接对象]  = new mysqli()	创建Mysql连接
    [连接对象] -> query		执行sql语句
    [结果]->num_rows  	   	判断是否有返回数据。
    [结果]->fetch_assoc()   	获取数据
    [连接对象]->close();     关闭连接
    [连接对象]->error()      获取连接错误信息

-PDO连接
    try{正常代码}....catch{异常后的代码}		//异常捕获
    getMessage();               //获取异常错误并返回
    $[数据库连接] -> exec($SQL语句)  	 //执行SQL命令
    $[连接] -> prepare($SQL语句) //预处理
    $[预处理] -> execute(); 	  //执行预处理
    fetch()					//获取数据
    $[连接]=null				   //关闭连接
    
    
pdo可以预防SQL注入攻击(预处理可以防止 SQL 注入攻击)
prepare`预处理语句可以有效地防止 SQL 注入攻击,因为它会`将 SQL 查询字符串与参数分开处理`,确保参数不会被解释为 SQL 代码的一部分。这有助于保护数据库免受恶意用户的攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值