Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:数据库只是目录, 数据表者是文档, 这和日常工作中的概念是一致的, 只是换个叫法罢了, 不要想太多了
<?php
// 连接数据库
namespace pdo_edu;
//以下两句是自动写的(当写完24-27句)
use Exception;
use PDO;
// 加载连接参数文件
$config = require __DIR__ . '/config/database.php';
var_dump($config) ;
printf('<pre>%s</pre>',print_r($config,true));
// PDO 是所有类型数据库的访问接口,连接的三要素:
// DSN(数据源)、用户名、密码。
$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);
try
{
//连接数据库
$pdo = new PDO($dsn,$username,$password);
var_dump($pdo);
}catch (Exception $e){
die($e->getMessage());
}
实例效果
<?php
// 单条查询
namespace pdo_edu;
use PDO;
// 1.连接数据库
require 'connect-exe.php';
// 2.查询数据库(查询语句)
$sql = 'SELECT * FROM `table01` where `age`>15';
// 预处理:预处理对象$stmt , 就是SQL语句对象.防止SQL注入攻击
$stmt = $pdo->prepare($sql);
// var_dump($stmt);
// printf('<pre>%s</pre>',print_r($stmt,true));
// 使用预处理对象调用 execute()执行这条sql语句
$stmt->execute();
// printf('<pre>%s</pre>',print_r($stmt,true));
//查询一条记录.PDO::FETCH_ASSOC表示只查询关联部分。
$hero = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($hero);
printf('<pre>%s</pre>',print_r($hero,true));
// 3.关闭数据库
unset($pdo);
实例效果
<?php
// 多条查询
namespace pdo_edu;
use PDO;
// 1.连接数据库
require 'connect-exe.php';
// 2.操作数据库
$sql = 'SElECT * FROM `table01` where `age`>15';
// 预处理对象$stmt就是SQL语句对象:为了防止 SQL注入
$stmt = $pdo->prepare($sql);
// 使用预处理对象调用 execute()执行这条sql语句
$stmt->execute();
//查询多条记录用fecthAll。PDO::FETCH_ASSOC表示只查询关联部分。
$hero = $stmt->fetchAll(PDO::FETCH_ASSOC);
printf('<pre>%s</pre>',print_r($hero,true));
// 3.关闭数据库
unset($pdo);
实例效果
<?php
// 新增数据
namespace pdo_edu;
use PDO;
require 'connect-exe.php';
$sql = 'insert `table01` set `name`=?,`skill`=?,`age`=?';
$stmt = $pdo->prepare($sql);
$data = ['老顽童','左右互搏',65];
$stmt->execute($data);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if($stmt->rowCount()===1){
echo '新增成功!新增记录的主键是: '.$pdo->lastInsertId();
}else{
echo '新增失败!';
print_r($stmt->errorInfo());
}
unset($pdo);
实例效果
<?php
// 更新数据
namespace pdo_edu;
use PDO;
require 'connect-exe.php';
// $sql = "UPDATE 表名 SET 字段=新值 WHERE 更新条件"
$sql = "UPDATE `table01` set `skill`=? where `id`=?";
$stmt = $pdo->prepare($sql);
$data = ['九阳神功',8];
$stmt->execute($data);
print_r($stmt->errorInfo());
die;
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '更新成功';
} else {
echo '没有记录被更新';
print_r($stmt->errorInfo());
}
// 3. 关闭连接[可选]
unset($pdo);
![](https://img.php.cn/upload/image/186/431/913/1589077396676775.jpg)
<?php
// 删除数据
namespace pdo_edu;
use PDO;
require 'connect-exe.php';
// $sql = "DELETE FROM 表名 WHERE 删除条件"
$sql = "delete from `table01` where `id`=8";
$stmt = $pdo->prepare($sql);
$stmt->execute();
if($stmt->rowCount()===1){
echo '删除成功';
}
print_r($stmt->errorInfo());
unset($pdo);
实例效果
总结:
1.经典案例:背背背,写写写。细细体会!
2.数据库知识薄弱,用得少,有些基本概念混淆了,比如查询时用数据库名来查,老是出错,后来才发现应该用表名查,所以说多练多写才能记住。
3.foreach()函数不是很熟,写不出数组的另一种打印格式。看来要找一本php函数大全来查找用法。
4.更新数据的时候,发现只能更新一个字段,两个以上会提示出错,不知为何?而且没有提示成功的字样。???