PHP 5.3 及以上版本可以使用 Mysqli 或 PDO 两种方式操作数据库。
PDO能操作多种数据库,是一种通用操作数据库方法。Mysqli 只能操作 MySQL,但它更简单,如果只使用Mysql,使用Mysqli扩展也是一个不错的选择。
定义一些变量,存储mysql连接的信息
$db_ip = "127.0.0.1";
$db_port = 3306;
$db_server = $db_ip.':'.$db_port; // 拼接ip和端口
$db_user = "root";
$db_pwd = "123456";
连接数据库
在进行所有关于sql操作前,必须先连接到数据库
连接到数据库后,你将得到一个连接对象,后续将使用该对象操作数据库
// 创建连接,得到连接对象
$conn = new mysqli($db_server, $db_user, $db_pwd);
// 检测连接
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
DDL语句
DDL语句,表示操作数据库和操作数据表。
创建数据库
创建数据库时,至少指定数据库名,通常也应该设置编码
// 设置变量
$create_db_name = "test3";
$create_db_enc = "utf8";
$sql_create_db = "create database $create_db_name character set $create_db_enc";
// 执行创建
$result = $conn->query($sql_create_db);
// 输出结果
echo "<br>";
var_dump($result); // true or false
创建数据表
创建数据表时,应该选定一个数据库,也就是使用use database语句。
连接对象,在对表进行操作前,务必选定一个数据库,后续默认操作该数据库
// 选定数据库
$db_use = "test3";
$sql_select_db = "use $db_use";
$conn->query($sql_select_db);
// 创建表
$sql_create_tb = " create table student(
name varchar(10),
age int(10)
);";
$result = $conn->query($sql_create_tb);
echo "<br>";
var_dump($result); // true or false
可以使用 select_db(数据库名)方法快速选择数据库
DML语句
DML表示对数据的,增删改
插入数据
// 增加数据
$sql_insert = "insert into student(name,age) values('张三',18)";
$result = $conn->query($sql_insert);
echo "<br>";
var_dump($result); // true or false
插入多条数据
使用multi_query()方法一次执行多条语句
// 增加多条数据
$sql_insert = "insert into student(name,age) values('张三',18);";
$sql_insert .= "insert into student(name,age) values('李四',18);";
$result = $conn->multi_query($sql_insert);
echo "<br>";
var_dump($result); // true or false
删除数据
// 删除数据
$sql_delete = "delete from student where name = '李四'";
if($conn->query($sql_delete) === TRUE) {
echo "删除成功";
}else {
echo "删除失败,错误信息为:" . $conn->connect_error;
}
修改数据
// 更新数据
$sql_update = "update student set age=12 where name='张三'";
$result = $conn->query($sql_update);
echo "<br>";
var_dump($result); // true仅表示语句执行成功
DQL语句
DQL表示查询语句,查询语句较为复杂
查询语句语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
简单查询
查询表中所有数据
// 查询语句
$sql_select = "select * from student";
$result = $conn->query($sql_select);
if ($result->num_rows > 0) {
// 输出每行数据
while($row = $result->fetch_assoc()) {
echo "name: ". $row["name"]. " - age: ". $row["age"]. " " . "<br>";
}
} else {
echo "查询完毕";
}
SQLI对象
在上述语句中,我们可以得出几点结论
- new mysqli_connect()就会自动连接并得到连接对象,后续使用该连接对象操作数据库
- select_db(name)可以快速选定数据库
- query(sql)方法能执行一条sql
- multi_query(sql)能执行包含多条sql的语句
- sql语句返回值,与执行的sql有关,不同语句返回值不同
预处理语句
为了防止sql注入,提供了预处理语句,例如插入数据
// 预执行增加数据
$sql_insert_pre = "insert into student(name,age) values(?,?)";
$stmt = $conn->prepare($sql_insert_pre);
// 必须使用变量
$name = "abc";
$age = 18;
$stmt->bind_param("ss", $name, $age);
$result = $stmt->execute();
$name = "aaa";
$age = 333;
$stmt->bind_param("ss", $name, $age);
$result = $stmt->execute();
echo "<br>";
var_dump($result); // true or false
bind_param参数有以下四种类型:
- i – integer(整型)
- d – double(双精度浮点型)
- s – string(字符串)
- b – BLOB(布尔值)
关闭资源
执行sql后,会自动关闭连接,也可以手动关闭
$conn->close();
查询数据后,可以清空缓存
$reslt->free();
本篇完,还有疑问?留下评论吧