MySQL 数据库入门
1. 基本的 CURD 练习
1.1 配置数据库的基本参数
- 这一块是连接数据库的参数
- 可以设置默认参数
这一块一般都是在安装一个程序的安装界面会提示用户输入相关的信息
<?php
namespace pdo_edu;
//数据库连接配置参数
return [
//数据库类型
'type' => $type ?? 'mysql',
//主机
'host' => $host ?? 'localhost',
//数据库名
'dbname' => $dbname ?? 'php',
//默认字符编码集
'charset' => $charset ?? 'utf8',
//连接端口
'port' => $port ?? '3306',
//连接用户名
'username' => $username ?? 'root',
//连接密码
'password' => $password ?? 'root123456'
];
// print_r($config);
1.2 PDO 数据库连接
- 两种方式创建数据源\$dsn
- 直接打印:
$dsn = sprintf('%s:host=%s;dbname=%s', $type, $host, $dbname);
- 字符串拼接:
$dsn = $type . ':' . 'host=' . $host . ';dbname=' . $dbname;
<?php
// 连接数据库
namespace pdo_edu;
use Exception;
use PDO;
// 加载配置参数
$config = require 'config.php';
// PDO: PHP Data Object, php数据对象
// pdo可以让php对所有类型的数据库, 提供了一个统一的,轻量级的访问接口
// PDO连接数据库三要素, 三个重要参数,
// 数据源: DSN
// 用户名: username
// 用户密码: password
// DSN: 数据库类型:host=数据库的主机地址;dbname=默认的数据库名称;chart=... ;port= ...
// $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
$type = $config['type'];
$host = $config['host'];
$dbname = $config['dbname'];
$username = $config['username'];
$password = $config['password'];
// 创建DSN
$dsn = sprintf('%s:host=%s;dbname=%s', $type, $host, $dbname);
// $dsn = $type . ':' . 'host=' . $host . ';dbname=' . $dbname;
try {
// 连接数据库
$pdo = new PDO($dsn, $username, $password);
// var_dump($pdo);
} catch (Exception $e) {
die($e->getMessage());
}
1.3 PDO 增加数据
- 两种写法
$sql = "INSERT
usersSET
name=?,
age=?";
$sql = "INSERT INTO
usersVALUES (null,?,?)";
<?php
// 数据表查询: 新增数据
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// $sql = 'INSERT 表名 SET name=?,age=?...';
$sql = "INSERT `users` SET `name`=?,`age`=?";
//第二种方式
$sql = "INSERT INTO `users` VALUES (null,?,?)";
$stmt = $pdo->prepare($sql);
$data = ['无敌韦小宝12', 66];
$stmt->execute($data);
// $stmt->rowCount():受影响的记录数
if ($stmt->rowCount() === 1) {
echo '新增成功,新增记录的主键:' . $pdo->lastInsertId();
} else {
echo '新增失败';
print_r($stmt->errorInfo());
}
unset($pdo);
1.4 PDO 删除数据
$sql="DELETE FROM 表名 WHERE 删除条件 "
<?php
// 数据表更新操作
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// $sql="DELETE FROM 表名 WHERE 删除条件 "
$sql = "DELETE FROM `users` WHERE `id`= ? ";
$stmt = $pdo->prepare($sql);
$data = ['10'];
$stmt->execute($data);
// $stmt->rowCount():受影响的记录数
if ($stmt->rowCount() === 1) {
echo '删除成功';
}
unset($pdo);
1.5 PDO 修改数据
$sql="UPDATE 表名 SET 字段=新的值 WHERE 更新条件 "
<?php
// 数据表更新操作
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// $sql="UPDATE 表名 SET 字段=新的值 WHERE 更新条件 "
$sql = "UPDATE `users` SET `name`= ? WHERE `id`= ? ";
$stmt = $pdo->prepare($sql);
$data = ['无敌是多么寂寞', 8];
$stmt->execute($data);
// $stmt->rowCount():受影响的记录数
if ($stmt->rowCount() === 1) {
echo '更新成功';
} else {
echo '更新失败';
print_r($stmt->errorInfo());
}
unset($pdo);
1.6 PDO 查询数据
$sql = 'SELECT 字段列表 FROM 数据表名称 WHERE 查询条件 '
<?php
// 数据表查询: 多条查询
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// echo '成功了';
// 2. 操作数据表(CURD)
// $sql = 'SELECT 字段列表 FROM 数据表名称 WHERE 查询条件 '
//匿名占位符
// $sql = 'SELECT * FROM `users` WHERE `age` < ?';
//命名占位符
$sql = 'SELECT * FROM `users` WHERE `age` < :age';
// 预处理对象$stmt:为了防止 SQL注入
$stmt = $pdo->prepare($sql);
// 预处理对象$stmt , 就是SQL语句对象
// 使用预处理对象调用 execute()执行这条sql语句
// 对应匿名占位符,索引数组
// $stmt->execute([18]);
// 对应命名占位符,使用关联数组
$stmt->execute([':age' => 15]);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// print_r($users);
foreach ($users as $user) {
printf('id=%s:姓名:%s---年龄=%s<br>', $user['id'], $user['name'], $user['age']);
}
//3.关闭数据库
unset($pdo);
2.总结
数据库的增删改查工作是最基本也是最常用的,随着框架的发展,开发人员已经很少会使用这些指令了,数据库的功能仅仅就是储存数据,读和写的操作。PDO 是一个很好的连接数据库操作方法,有效的防止基本的 SQL 语句注入,但同样如果从一些未定义的类访问也会造成漏洞的存在,相对来说功能会越来越完善的。