PHP操作MySQL数据库
1、关于MySQLi
MySQLi函数库是MySQL系统函数的增强版,它更稳定、高效、安全。它与MySQL函数库的应用基本类似,而且大部分函数的使用方法都一样,唯一的区别就是MySQLi函数库中的函数名称都是以mysqli开始的。
2、连接数据库
要想使用PHP操作MySQL数据库,首先要建立与MySQL数据库的连接。MySQLi扩展中,mysqli_connect()函数用于实现与MySQL数据库的连接,其语法格式如下:
连接数据库
mysqli_connect(主机IP,用户名,密码,数据库名,端口号) //如果端口号是3306可以省略
mysqli_connect_error():获取连接数据库的错误信息
mysqli_connect_errno():获取连接数据库的错误编码
mysqli_set_charset(连接对象,字符编码)
代码如下:
//连接数据库,连接成功返回连接对象
$link=@mysqli_connect(
'localhost'
,
'root'
,
'root'
,
'data'
,
'3306'
);
//var_dump($link); //object(mysqli)
if
(mysqli_connect_error()){
echo
'错误号:'
.mysqli_connect_errno(),
'<br>'
;
//显示错误编码
echo
'错误信息:'
.mysqli_connect_error();
//显示错误信息
exit
;
}
//设置字符编码
mysqli_set_charset($link,
'utf8'
);
除此之外,MySQLi扩展还提供了mysqli_select_db()函数用来选择MySQL数据库。其语法格式如下:
bool mysqli_select_db(mysqli link, string dbname)
$host =
"127.0.0.1"
;
//MySQL 服务器地址
$userName =
"root"
;
//用户名
$password =
"111"
;
//密码
$dbName =
"db_database18"
;
//数据库名称
$connID = mysqli_connect($host, $userName, $password);
//建立与MySQL 数据库服务器的连接
if
(mysqli_select_db($connID, $dbName)) {
//选择数据库
echo
"数据库选择成功!"
;
}
else
{
echo
"数据库选择失败!"
;
}
脚下留心:与数据库相关用utf8,与页面显示相关用utf-8
new mysqli 和 mysqli_connect 两种方式:
在 PHP 中,你可以使用 new mysqli 和 mysqli_connect 两种方式来连接 MySQL 数据库。这两种方法都是用于创建与 MySQL 数据库的连接对象,但它们有一些不同之处。下面是对它们的说明:
- new mysqli 构造函数:new mysqli 是通过实例化 mysqli 类来创建与数据库的连接对象。它的语法如下:
phpCopy code
$mysqli = new mysqli($host, $username, $password, $database, $port, $socket);
- $host:数据库的主机名。
- $username:数据库的用户名。
- $password:数据库的密码。
- $database:要连接的数据库名称。
- $port(可选):数据库的端口号,默认为 3306。
- $socket(可选):数据库的 Unix 套接字文件路径。
示例:
phpCopy code
$host = 'localhost'; $username = 'root'; $password = 'password'; $database = 'mydb'; $mysqli = new mysqli($host, $username, $password, $database);
这种方式创建的连接对象是面向对象的,你可以使用 $mysqli 对象调用相关的方法进行数据库操作。
- mysqli_connect 函数:mysqli_connect 是一个函数,用于创建与 MySQL 数据库的连接。它的语法如下:
phpCopy code
$conn = mysqli_connect($host, $username, $password, $database, $port, $socket);
- $host:数据库的主机名。
- $username:数据库的用户名。
- $password:数据库的密码。
- $database:要连接的数据库名称。
- $port(可选):数据库的端口号,默认为 3306。
- $socket(可选):数据库的 Unix 套接字文件路径。
示例:
phpCopy code
$host = 'localhost'; $username = 'root'; $password = 'password'; $database = 'mydb'; $conn = mysqli_connect($host, $username, $password, $database);
这种方式创建的连接对象是面向过程的,你可以使用 $conn 变量调用相关的函数进行数据库操作。
无论你选择使用 new mysqli 还是 mysqli_connect,都能创建一个连接对象,可以用于执行查询、插入、更新和删除等操作。它们之间的选择通常取决于你的编程风格和偏好,以及具体的应用场景。
3、操作数据
要对数据库中的表进行操作,需要使用mysqli_query()函数。其语法格式如下:
mysqli_query(mysqli link, string query [, int resultmode])
☑ link为必选参数,mysqli_connect()函数成功连接MySQL数据库服务器后所返回的连接标识。
☑ query为必选参数,所要执行的查询语句。
☑ resultmode为可选参数,该参数取值为MYSQLI_USE_RESULT和MYSQLI_STORE_RESULT。其中,MYSQLI_STORE_RESULT为该函数的默认值。如果返回大量数据,可以应用MYSQLI_USE_RESULT,但应用该值时,以后的查询调用可能返回一个commands out of sync错误,解决办法是应用mysqli_free_result()函数释放内存。
如果SQL语句是查询指令select,成功则返回查询结果集,否则返回false;如果SQL语句是insert、delete、update等操作指令,成功则返回true,否则返回false。如果使用mysqli_query()函数执行select语句,如果成功,将返回查询结果集。
创建news数据库
-- 创建表
drop
table
if
exists
news;
create
table
news(
id
int
unsigned
auto_increment primary
key
comment
'主键'
,
title
varchar
(
20
)
not
null
comment
'标题'
,
content
text
not
null
comment
'内容'
,
createtime
int
not
null
comment
'添加时间'
)
engine
=
innodb
charset
=utf8
comment
'新闻表'
;
-- 插入测试数据
insert
into
news
values
(
null
,
'锄禾'
,
'锄禾日当午'
,
unix_timestamp
());
insert
into
news
values
(
null
,
'草'
,
'离离原上草'
,
unix_timestamp
());
思考:时间字段可以用datetime类型,也可以使用int类型。一般用int,因为datetime占用8个字节,int占用4个字节。
1 数据操作语句
通过mysqli_query()执行SQL语句,增、删、改语句执行成功返回true,失败返回false
<?php
//1、连接数据库
$link
=mysqli_connect(
'localhost'
,
'root'
,
'123456'
,
'phpbc'
);//2、设置字符编码
mysqli_set_charset(
$link
,
'utf8'
);//3、执行SQL语句
//3.1 执行insert语句
/*
$rs
=mysqli_query(
$link
,
"insert into news values (null,'静夜思','床前明月光',unix_timestamp())"
);
if
(
$rs
)
echo
'自动增长的编号是:'
.mysqli_insert_id(
$link
);
*/
//3.2 执行update语句
/*
$rs
=mysqli_query(
$link
,
"update news set content='疑是地上霜' where id=4"
);
if
(
$rs
)
echo
'受影响的记录数是:'
.mysqli_affected_rows(
$link
);
else
{
echo
'错误码:'
.mysqli_errno(
$link
),
'<br>'
;
echo
'错误信息:'
.mysqli_error(
$link
);
}
*/
//3.3 执行delete语句
mysqli_query(
$link
,
"delete from news where id=5"
);
用到的函数
mysqli_query():执行SQL语句
mysqli_insert_id():获取插入记录自动增长的ID
mysqli_affected_rows():获取受影响的记录数
mysqli_error():获取执行SQL语句的错误信息
mysqli_errno():获取执行SQL语句的错误码
2、数据查询语句
数据查询用select、desc、show,成功会返回结果集,失败返回false
//1、连接数据库
$link=@mysqli_connect(
'localhost'
,
'root'
,
'123456'
,
'phpbc'
)
or
die
(
'错误信息:'
.mysqli_connect_error());
//2、设置字符编码
mysqli_query($link,
'set names utf8'
);
//3、执行查询语句
$rs=mysqli_query($link,
'select * from news'
);
//var_dump($rs); //object(mysqli_result)
//4、获取对象中的数据
//4.1 将对象中的一条数据匹配成索引数组,指针下移一条
//$rows=mysqli_fetch_row($rs);
//4.2 将对象中的一条数据匹配成关联数组,指针下移一条
//$rows=mysqli_fetch_assoc($rs);
//4.3 将对象中的一条数据匹配成索引,关联数组,指针下移一条
//$rows=mysqli_fetch_array($rs);
//4.4 总列数、总行数
//echo '总行数'.mysqli_num_rows($rs),'<br>';
//echo '总列数'.mysqli_num_fields($rs),'<br>';
//4.5 获取所有数据
//$list=mysqli_fetch_all($rs); //默认是索引数组
//$list=mysqli_fetch_all($rs,MYSQLI_NUM); //匹配成索引数组
//$list=mysqli_fetch_all($rs,MYSQLI_ASSOC); //匹配成关联数组
$list=mysqli_fetch_all($rs,MYSQLI_BOTH);
//匹配成关联、索引数组
echo
'<pre>'
;print_r($list);
//5、销毁结果集
mysqli_free_result($rs);
//6、关闭连接
mysqli_close($link);
使用的函数
mysqli_fetch_assoc():将一条数组匹配关联数组
mysqli_fetch_row():将一条记录匹配成索引数组
mysqli_fetch_array():将一条记录匹配成既有关联数组又有索引数组
mysqli_fetch_all():匹配所有记录
mysqli_num_rows():总行数
mysqli_num_fields():总记录数
mysqli_free_result():销毁结果集
mysqli_close():关闭连接
至此,PHP操作MySQL数据库的方法已经学习大半,我们可以实现MySQL服务器的连接、选择数据库、执行查询语句,并且可以将查询结果集中的数据返回到数组中。下面编写一个实例,通过PHP操作MySQL数据库,读取数据库中存储的数据。
4、WEB案例
准备测试表和数据
1、数据展示
2、添加数据
3、修改数据
4、删除数据
原文始发于微信公众号(贝雷帽SEC):代码审计—MySQLi基础
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论