总字符数: 11.24K

代码: 7.08K, 文本: 2.06K

预计阅读时间: 40 分钟

一、PHP连接MySQL数据库

PHP 编程语言要想操作 MySQL,执行 SQL 语句,进行增删改查,首先必须要与 MYSQL 数据库建立连接,才能进行数据的存储与查询读取.PHP 要想连接 MYSQL 数据库,需要 MySQL 服务器地址、用户名、密码和数据库名称.

实战-PHP 连接 MySQL 数据库

面向对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//面向对象
<?php
$servername = "localhost"; // Replace with your database server name
$username = "root"; // Replace with your database username
$password = "root123"; // Replace with your database password
$dbname = "ksxt"; // Replace with your database name

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

echo "Connected successfully";

// Close connection
$conn->close();//面向对象关闭连接
?>

面向过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$servername = "localhost";
$username = "root";
$password = "root123";

// 创建连接
$conn = mysqli_connect($servername, $username, $password);

// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功";
//关闭连接
mysqli_close($conn);//面向过程
?>

面向对象和面向过程的区别

  • 面向对象和面向过程是两种不同的编程范式,用于组织和设计代码.

  • 在面向过程的编程中,代码主要以过程或函数为中心,通过一系列的函数调用来完成任务.在PHP中,面向过程的方式使用mysqli或PDO扩展来连接和操作MySQL数据库.你需要手动编写连接、查询和关闭连接等功能的代码.

  • 而在面向对象的编程中,代码主要以对象为中心,通过定义和使用类、对象、方法和属性来组织和实现功能.在PHP中,使用面向对象的方式连接MySQL数据库可以使用mysqli或PDO扩展的面向对象接口.你可以创建一个数据库连接对象,通过调用该对象的方法来执行查询、插入、更新等操作.这种方式更加灵活和易于维护,也更符合现代软件开发的需求.

连接数据库好用简洁代码(面向过程)

1
2
3
4
5
6
7
8
9
10
<?php
$servername="127.0.0.1";
$username="root";
$password="root123";
$db_name="ksxt";
$conn = mysqli_connect($servername,$username,$password,$db_name);
if(!$conn){
die('数据库连接失败'.mysql_connect_error());
}
?>

mysqli_connect_error() 函数

mysqli_connect_error() 函数返回上一次连接错误的错误描述.

返回值:返回一个描述错误的字符串.如果没有错误发生则返回 NULL.

二、MySQL 语句的执行

mysqli_query() 函数

mysqli_query() 函数执行某个针对数据库的查询.

语法:

1
mysqli_query(connection,query);

参数:

  • connection: 必需.规定要使用的 MySQL 连接.
  • query: 必需,规定查询字符串.

返回值:
针对成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,将返回一个 mysqli_result 对象.针对其他成功的查询,将返回 TRUE.如果失败,则返回 FALSE.

:如下例子将执行从ksxt数据库中 user 表中选取user_name="admin"的内容的SQL语句:

1
2
3
4
5
6
7
8
9
10
11
<?php
$con=mysqli_connect("127.0.0.1","root","root123","ksxt");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}

$sql="select * from sys_user where username='admin'";
$result = mysqli_query($con,$sql);
?>

三、SQL语句查询结果的输出

mysqli_fetch_array() 函数

mysqli_fetch_array()函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有.


注意:该函数返回的字段名是区分大小写的.

用法:

1
mysqli_fetch_array(result,resulttype);

参数:

  • result
    必需.规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符.
  • resulttype
    可选.规定应该产生哪种类型的数组.可以是以下值中的一个:
    • MYSQLI_ASSOC
    • MYSQLI_NUM
    • MYSQLI_BOTH

返回值:
返回与读取行匹配的字符串数组.如果结果集中没有更多的行则返回 NULL.

:如下例子将从ksxt数据库中 sys_user 表中选取username="admin"password数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$con=mysqli_connect("127.0.0.1","root","root123","ksxt");
// 检测连接
if (mysqli_connect_error())
{
echo "连接失败: " . mysqli_connect_error();
}

$sql="select * from sys_user where user_name='admin'";
$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($result))
{
echo $row['user_name'] . " " . $row['password'];
echo "<br>";
}
?>

:由于mysqli_fetch_array()函数只从结果集中取得一行作为关联数组,那么当查询结果为多行的情况时,便可以结合一个while循环将数据逐行输出,想要输出所有的多行关联数组数据,除了可以mysqli_fetch_array()函数结合while循环,还可以使用mysqli_fetch_all() 函数.

显示结果:

mysqli_fetch_all() 函数

mysqli_fetch_all()函数从结果集中取得所有行作为关联数组,或数字数组,或二者兼有.


注意:该函数返回的字段名是区分大小写的.

用法:

1
mysqli_fetch_all(result,resulttype);

参数:

  • result
    必需.规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符.
  • resulttype
    可选.规定应该产生哪种类型的数组.可以是以下值中的一个:
    • MYSQLI_ASSOC
    • MYSQLI_NUM
    • MYSQLI_BOTH

返回值:
返回包含结果行的关联数组或数字数组.

:如下例子将从ksxt数据库中 sys_user 表中选取并输出所有usernamepassword:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$con=mysqli_connect("127.0.0.1","root","root123","ksxt");
// 检测连接
if (mysqli_connect_error())
{
echo "连接失败: " . mysqli_connect_error();
}

$sql="select * from sys_user";
$result = mysqli_query($con,$sql);
$array=mysqli_fetch_all($result,MYSQLI_ASSOC);
foreach ($array as $key => $row)
{
echo $row['user_name'] . " " . $row['password'];
echo "<br>";
}
?>

四、SQL语句查询结果的行数

mysqli_num_rows() 函数

mysqli_num_rows() 函数返回结果集中行的数量.


语法:

1
mmysqli_num_rows(result);

参数:

  • result
    必需.规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符.

返回值:
结果集中行的数量.
:如下例子将sql语句的结果集行数输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$con=mysqli_connect("127.0.0.1","root","root123","ksxt");
// 检测连接
if (mysqli_connect_error())
{
echo "连接失败: " . mysqli_connect_error();
}

$sql="select * from sys_user where user_name='康维'";
$result = mysqli_query($con,$sql);

echo "查询结果的行数为:".mysqli_num_rows($result);
?>

五、PHP MySQL 创建数据库

数据库存有一个或多个表.

你需要 CREATE 权限来创建或删除 MySQL 数据库.

接下来都将以面向过程的方式来执行sql语句.

面向过程创建数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$servername = "localhost";
$username = "root";
$password = "root123";

// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}

// 创建数据库
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
echo "数据库创建成功";
} else {
echo "Error creating database: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

六、PHP 创建 MySQL 表

一个数据表有一个唯一名称,并有行和列组成.

sql语句设计

CREATE TABLE 语句用于创建 MySQL 表.

创建表前,我们需要使用 use test 来选择要操作的数据库”test”:

我们将创建一个名为 “user” 的表,有 9个列: “id”, “username”, “password”, “email” ,”phone”,”touxiang”,”address”,”sex”,”addtime”:

1
2
3
4
5
6
7
8
9
10
11
12
create table user(
`id` int not null auto_increment,
`username` varchar(20) not null unique,
`password` varchar(36) not null,
`email` varchar(50) not null,
`phone` varchar(15) not null,
`touxiang` varchar(255) default './images/default.jpg',
`address` varchar(255) not null,
`sex` varchar(5) not null,
`addtime` varchar(100) not null,
primary key (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

在设置了数据类型后,你可以为每个列指定其他选项的属性:

  • NOT NULL - 每一行都必须含有值(不能为空),null 值是不允许的.
  • DEFAULT value - 设置默认值
  • UNSIGNED - 使用无符号数值类型,0 及正数
  • AUTO INCREMENT - 设置 MySQL 字段的值在新增记录时每次自动增长 1
  • PRIMARY KEY - 设置数据表中每条记录的唯一标识. 通常列的 PRIMARY KEY 设置为 ID 数值,与 AUTO_INCREMENT 一起使用.

每个表都应该有一个主键(本列为 “id” 列),主键必须包含唯一的值.

下面是两种创建数据库方式:

MySQLi - 面向过程创建数据表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$servername = "localhost";
$username = "root";
$password = "root123";
$dbname = "myDB";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检测连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}

// 使用 sql 创建数据表
$sql = "create table user(
`id` int not null auto_increment,
`username` varchar(20) not null unique,
`password` varchar(36) not null,
`email` varchar(50) not null,
`phone` varchar(15) not null,
`touxiang` varchar(255) default './images/default.jpg',
`address` varchar(255) not null,
`sex` varchar(5) not null,
`addtime` varchar(100) not null,
primary key (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;";

if (mysqli_query($conn, $sql)) {
echo "数据表 user 创建成功";
} else {
echo "创建数据表错误: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

七、PHP MySQL 插入数据

在创建完数据库和表后,我们可以向表中添加数据.

以下为一些语法规则:

  • PHP 中 SQL 查询语句必须使用引号
  • 在 SQL 查询语句中的字符串值必须加引号
  • 数值的值不需要引号
  • NULL 值不需要引号

INSERT INTO 语句通常用于向 MySQL 表添加新的记录:

1
2
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

本地test数据库已经创建了表 “user”,表字段有: “id”, “username”, “password” ,”email”,”phone”,”touxiang”,”address”,”sex”,”addtime”. 现在,让我们开始向表填充数据.

例子:向 “user” 表添加了新的记录

MySQLi - 面向过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$servername = "localhost";
$username = "root";
$password = "root123";
$dbname = "myDB";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

$sql = "insert into user(username, password,email,phone,address,sex,addtime) values('zhangsan','984556','182@qq.com','16521131154','赛客路100号','nan','2023-1-1');";

if (mysqli_query($conn, $sql)) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

八、PHP MySQL Delete


DELETE 语句用于从数据库表中删除行.

删除数据库中的数据

DELETE FROM 语句用于从数据库表中删除记录.

语法

1
2
DELETE FROM table_name
WHERE some_column = some_value

如下删除实例

数据库myDB中user表:

下面的实例删除 “user” 表中username=’lisi’ 的记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$con=mysqli_connect("127.0.0.1","root","root123","myDB");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}


mysqli_query($con,"delete from user where username='lisi' ");

mysqli_close($con);
?>

结果:

九、PHP MySQL Update

UPDATE 语句用于中修改数据库表中的数据.

更新数据库中的数据

UPDATE 语句用于更新数据库表中已存在的记录.

语法

1
2
3
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

如下更改实例,数据库myDB中user表:

这里更改 “user” 表中username=’wangwu’改成’奥特曼’:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// 连接到 MySQL 数据库
$servername = "localhost";
$username = "root";
$password = "root123";
$dbname = "myDB";

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

// 检查连接是否成功
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}

// 执行更新操作
$sql = "UPDATE user SET username = '奥特曼' WHERE username='wangwu'";

if (mysqli_query($conn, $sql)) {
echo "记录更新成功";
} else {
echo "更新失败: " . mysqli_error($conn);
}

// 关闭连接
mysqli_close($conn);
?>

结果:

十、PHP MySQL 查询数据

语法:select 字段或表达式列表 [from 子句] [where 子句] [order by 子句] [limit 子句];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
--字段或表达式列表
1)字段,自然是来源于"表",则其必然依赖于 from 子句;
2)表达式是类似这样一个内容:8, 8+3, now(),concat()函数是 mysql 中的系统函数,用于"连接"多个字符串;
3)每个"输出项"(字段或表达式结果),都可以给其设定一个"别名"(字段别名)形式为:
字段或表达式 as 别名;设置别名,实际上,表的字段并没有改变,而只是改变了"结果集"的字段名;
--from 子句
from 子句表示 select 部分从中"取得"数据的数据源--其实就是表.
--where 子句
说明:
1)where 子句就是对 from 子句中的"数据源"中的数据进行筛选的条件设定,筛选的机制是
"一行一行进行判断",其作用,几乎就跟各种语言中 if 语句的作用一样.
2)where 子句依赖于 from 子句;
3)where 子句中,通常都需要使用各种"运算符";
算术运算符: + - * / %
比较运算符: > >= < <= =(等于) < >(不等于) ==(等于) !=(不等于)
逻辑运算符: and or not
4)对 where 子句的更进一步理解:
where true 取出全部记录
where false 不取出任何记录
--order by 子句
它用于将前面"取得"的数据以设定的标准(字段)来进行排序以输出结果.
形式:
order by 字段 1 [asc|desc], 字段 2 [asc|desc],......
说明:
1)对前面的结果数据以指定的一个或多个字段排序;
2)排序可以指定正序(asc,默认值)或倒序(desc);
3)多个字段的排序,都是在前一个字段排序基础上,如果还有"相等值",才继续以后续字段排序;
--limit 子句
含义:
它用于将"前述取得的数据",按指定的行取出来:从第几行开始取出多少行;
形式:limit 起始行号,要取出的行数;
说明:
1.起始行号都是从 0 开始算起的;
2.起始行号跟数据中的任何一个字段(比如 id)没有关系;
3.要取出的行数也是一个数字,自然应该是大于 0 的;
4.有一个简略形式:limit 行数; 表示直接从第 0 行开始取出指定的行数,它相当于limit 0, 行数;

下面的实例读取 “user” 表中存储的所有数据,并根据 “username” 列对结果进行排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$con=mysqli_connect("127.0.0.1","root","root123","myDB");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}

$result = mysqli_query($con,"select * from user order by username");
while($row = mysqli_fetch_array($result))
{
echo $row['username'];
echo " 密码:" . $row['password'];
echo " 邮箱:" . $row['email'];
echo " 手机号:" . $row['phone'];
echo " 性别:" . $row['sex'];
echo "<br>";
}

mysqli_close($con);
?>

结果显示: