<?php// database.php// 数据库连接默认参数return [// 数据库的类型'type' => 'mysql',// 数据库默认主机'host' => 'localhost',// 默认数据库'dbname' => 'dbname',// 默认的用户名'username' => 'username',// 默认的用户密码'password' => 'username',// 默认端口号'port' => '3306',// 默认字符编码集'charset' => 'utf8',];
2.1 获取配置项
2.2 自定义数据库配置
2.3 用自定义数组替换获取的配置项$config = array_merge($config, $custom);
2.4 解析配置项(将配置项中的数组值解析到变量)['username'=>$username,'password'=>$password] = $config;
2.5 创建数据源DSN(连接语句对象化)
2.6 创建PDO实例(连接数据库,在此时进行传参)
<?php// 连接数据库// 1. 获取配置项$config = require __DIR__ . '/database.php';// print_r($config);// 自定义配置$custom = [// 数据库默认主机'host' => 'localhost',// 默认数据库'dbname' => 'phpedu',// 默认的用户名'username' => 'root',// 默认的用户密码'password' => 'root',];// 数组替换更新$config = array_merge($config, $custom);// print_r($config);// 2. 解析配置项// ['id'=>$id, 'name'=>$name]=['id'=>1,'name'=>'a'];['type'=>$type,'host'=>$host,'dbname'=>$dbname] = $config;['username'=>$username,'password'=>$password] = $config;['port'=>$port,'charset'=>$charset] = $config;// echo $type, $username, $charset;// extract($config);// 3. 创建数据源DSN// echo vsprintf('%s,%s,%s', ['php','cn','zhu']);$tmpl = '%s:host=%s;dbname=%s;port=%s;charset=%s';$params = [$type,$host,$dbname,$port,$charset];$dsn = vsprintf($tmpl, $params);// echo $dsn;// 4. 创建PDO实例(连接数据库)try {$db = new PDO($dsn, $username, $password);// if ($db) {// echo '连接成功';// }// var_dump($db);// 设置结果集的获取模式: 仅返回关联部分$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);} catch (PDOException $e) {die('连接失败' . $e->getMessage());}
<?php// 快速预览// 1.连接数据库$db = new PDO('mysql:dbname=phpedu','root','root');// 2.执行SQL$stmt = $db->prepare('select id,name,email from user limit 1');$stmt ->execute();print_r($stmt->fetch(PDO::FETCH_ASSOC));// 3.关闭连接unset($db);
简化版
<?php// ? 连接数据库// 1. 连接数据库: PDO类实例$username = 'root';$password = 'root';$dsn = 'mysql:dbname=phpedu';try {$db = new PDO($dsn, $username, $password);if ($db) {echo '连接成功';}} catch (PDOException $e) {die('连接失败' . $e->getMessage());}
<?php// ? 新增: INSERT-1// 1. 连接数据库require __DIR__ . '/config/connect.php';// 2. 执行操作// sql: 预处理,sql中的数据使用占位符(参数)// 参数有二种: (1) 命名占位符 ":email" (2) 匿名占位符: "?"$sql = 'INSERT user VALUES (null,:uname,:email,:password)';// ? 创建sql语句对象 PDOStatement的实例$stmt = $db->prepare($sql);// var_dump($stmt);// ? 将具体的值绑定到参数上$stmt->bindValue('uname', '老张');$stmt->bindValue('email', 'lz@qq.com');$stmt->bindValue('password', md5('123'));// 查看一下预处理sql语句// $stmt->debugDumpParams();// ? 执行sqlif ($stmt->execute()) {// 成功echo '新增成功, 新记录的主键ID = ' . $db->lastInsertId();} else {echo '新增失败';print_r($stmt->errorInfo());}// 3. 关闭连接(可选)// unset($db);// $db = null;
<?php// ? 新增: INSERT-2// 1. 连接数据库require __DIR__ . '/config/connect.php';// 2. 执行操作// sql: 预处理,sql中的数据使用占位符(参数)// 参数有二种: (1) 命名占位符 ":email" (2) 匿名占位符: "?"$sql = 'INSERT user VALUES (null,?,?,?)';// ? 创建sql语句对象 PDOStatement的实例$stmt = $db->prepare($sql);// ? 执行sqlif ($stmt->execute(['小猪', 'xz@php.cn', md5('abc')])) {// 成功echo '新增成功, 新记录的主键ID = ' . $db->lastInsertId();} else {echo '新增失败';print_r($stmt->errorInfo());}// 3. 关闭连接(可选)// unset($db);// $db = null;
<?php// ? 更新: UPDATE// 1. 连接数据库require __DIR__ . '/config/connect.php';// 2. 执行操作$sql = 'UPDATE user SET uname= ? WHERE id = ?';// $sql = 'UPDATE user SET uname= ?';// 检测sql语句中是否存在 where 条件?没有则禁止执行if (!stristr($sql, 'WHERE')) {die('禁止无条件更新');}// ? 创建sql语句对象$stmt = $db->prepare($sql);// ? 将某个变量绑定到参数上$stmt->bindParam(1, $uname);$stmt->bindParam(2, $id);$uname = '西门庆';$id = 4;// ? 执行sqlif ($stmt->execute()) {// $stmt->debugDumpParams();// 更新成功有二种情况,1.数据变化了,2.数据没有发生变化// rowCount(): 返回受影响的记录数量(修改了)if ($stmt->rowCount() > 0) {echo '更新成功';} else {echo '没有记录被更新';}} else {// echo '更新失败';// print_r($stmt->errorInfo());die('更新失败: '. $stmt->errorInfo()[2]);}
<?php// ? 删除: DELETE// 1. 连接数据库require __DIR__ . '/config/connect.php';// 2. 执行操作$sql = 'DELETE FROM user WHERE id = ?';// $sql = 'DELETE FROM user';// 检测sql语句中是否存在 where 条件?没有则禁止执行if (!stristr($sql, 'WHERE')) {die('禁止无条件删除');}// ? 创建sql语句对象$stmt = $db->prepare($sql);// ? 执行sqlif ($stmt->execute([4])) {if ($stmt->rowCount() > 0) {echo '删除成功';} else {echo '没有记录被删除';}} else {die('删除失败: '. $stmt->errorInfo()[2]);}
<?php// ? 查询: SELECT-1// 1. 连接数据库require __DIR__ . '/config/connect.php';// 2. 执行操作$sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';// ? 创建sql语句对象$stmt = $db->prepare($sql);// ? 执行sqlif ($stmt->execute([2, 3, 6])) {// 查询成功,结果集解析到数组中// 1. 逐条: fetch + while// 2. 多条: fetchAll + foreach// print_r($stmt->fetch());// print_r($stmt->fetch());// print_r($stmt->fetch());// print_r($stmt->fetch(PDO::FETCH_ASSOC));// print_r($stmt->fetch(PDO::FETCH_NUM));// fetch + whilewhile ($user = $stmt->fetch()) {print_r($user);}} else {die('查询失败: ' . $stmt->errorInfo()[2]);}
<?php// ? 查询: SELECT-1// 1. 连接数据库require __DIR__ . '/config/connect.php';// 2. 执行操作$sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';// ? 创建sql语句对象$stmt = $db->prepare($sql);// ? 执行sqlif ($stmt->execute([2, 3, 6])) {// 查询成功,结果集解析到数组中// 1. 逐条: fetch + while// 2. 多条: fetchAll + foreach// print_r($stmt->fetch());// print_r($stmt->fetch());// print_r($stmt->fetch());// print_r($stmt->fetch(PDO::FETCH_ASSOC));// print_r($stmt->fetch(PDO::FETCH_NUM));// fetch + whilewhile ($user = $stmt->fetch()) {print_r($user);}} else {die('查询失败: ' . $stmt->errorInfo()[2]);}
<?php// ? 查询: SELECT-3: 将列名绑定到变量上// 1. 连接数据库require __DIR__ . '/config/connect.php';// 2. 执行操作$sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';// ? 创建sql语句对象$stmt = $db->prepare($sql);// ? 执行sqlif ($stmt->execute([2,3,6])) {// 将每一列的值,绑定到指定变量上// 三个字段,三个变量// 字段的索引,1,2,3,4....// $stmt->bindColumn(1, $id);// $stmt->bindColumn(2, $uname);// $stmt->bindColumn(3, $email);// 用字段名称$stmt->bindColumn('id', $id);$stmt->bindColumn('uname', $uname);$stmt->bindColumn('email', $email);while ($stmt->fetch()) {printf("%d: %s ( %s )\n", $id, $uname, $email);}} else {die('查询失败: '. $stmt->errorInfo()[2]);}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号