Correcting teacher:Guanhui
Correction status:qualified
Teacher's comments:完成的很好,不过HTML中的foreach可以使用foreach的模板语法,这样更简洁。
extension=php_pdo_mysql.dll
去掉前面的分号注释,然后重启Apache
<?php
//定义数据库常量
/*--------------------------------------------------------------------*/
//主机名
define('DB_HOST','localhost');
//用户名
define('DB_USER','root');
//密码
define('DB_PWD','wang1111');
//数据库名
define('DB_NAME','tp5');
//端口号
define('DB_PORT','3306');
//数据库类型
define('DB_TYPE','mysql');
//数据库的编码
define('DB_CHARSET','utf8');
//定义PDO的DSN,数据库源名,包括数据库类型、主机名、数据库名称和数据库编码。
define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
//PDO驱动程序的名称,后面为一个冒号,再后面是可选的驱动程序连接数据库变量信息,如主机名端口号和数据库名
//$dsn = 'mysql:host=localhost,dbname=tp5';
/*-------------------------------------------------------------------------*/
<?php
//使用DPO进行mysql类的数据库连接
require "config.php";
try{
//数据库连接,返回一个PDO对象
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
//捕捉数据库信息的PDOEXCEPTION异常
}catch(PDOException $e){
echo $e->getMessage();
//捕捉拥有Throwable接口的错误或者其他异常
}catch(Throwable $e){
echo $e->getMessage();
}
//更新数据
$sql = "UPDATE `user` SET `username` = 'Flower' WHERE `age` = 32";
//用exec()执行sql语句,不能执行带有结果集的sql语句,返回受影响的行数
$res = $pdo->exec($sql);
if($res == 0){
//返回一个SQLSTATE码
var_dump($pdo->errorcode());
echo '<br>';
//返回错误信息数组
var_dump($pdo->errorInfo());
}
//查询数据
$sql_S = "SELECT * FROM `user` ";
//执行SQL语句,返回结果集用query()
$stmt = $pdo->query($sql_S);
//遍历集合
foreach($stmt as $key => $value){
echo '<br>';
var_dump($value['username']);
}
//1.使用问号参数占位符的SQL预处理语句
$sql = "SELECT * FROM `user` WHERE `username` = ? AND `password` = ?";
//用prepare()来执行sql语句并返回一个statement对象
$stmt = $pdo->prepare($sql);
//创建变量
$username = "admin";
$password = "123456";
/* $username = "admin";
$password = "123456";
用bindParam()绑定一个参数到指定的变量
$stmt->bindParam(1,$username);
$stmt->bindParam(2,$password); */
//用bindValue()绑定一个参数到指定的值
$stmt->bindValue(1,'admin');
$stmt->bindValue(2,'123456');
//用execute()执行一条预处理语句
$stmt->execute();
//var_dump($stmt);
//rowCount()返回受上一个sql语句影响的行数
echo $stmt->rowCount();
//2.使用命名占位符的SQL预处理语句
$sql = "SELECT * FROM `user` WHERE `username` =:username AND `password` =:password";
//用prepare()来执行sql语句并返回一个statement对象
$stmt = $pdo->prepare($sql);
//创建变量
/*$username = "admin";
$password = "123456";
用bindParam()绑定一个参数到指定的变量
$stmt->bindParam(":username",$username);
$stmt->bindParam(":password",$password);*/
//用bindValue()绑定一个参数到指定的值
$stmt->bindValue(":username",'admin');
$stmt->bindValue(":password",'123456');
//用execute()执行一条预处理语句
$stmt->execute();
//var_dump($stmt);
//rowCount()返回受上一个sql语句影响的行数
echo $stmt->rowCount();
1.bingParm():绑定一个参数到变量;bindValue():绑定一个参数到值;
2.bindParm()绑定的变量可以在execute()执行语句之前用引用传值;bindValue()的值绑定之后就不会在改变
<?php
//引入连接数据库的常量配置
require "config.php";
//连接数据库
try{
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
}catch(PDOException $e){
echo $e->getMessage();
}catch(Throwable $e){
echo $e->getMessage();
}
//sql语句
$sql = "SELECT * FROM `user`";
//执行sql语句,用query()来执行,因为返回结果集
$res = $pdo->query($sql);
//把结果用关联数组来输出显示
$res = $res->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PDO遍历数据</title>
<style>
body{
display: flex;
justify-content: center;
}
</style>
</head>
<body>
<table border="1px" cellspacing="0" cellpadding="10px">
<tr>
<td>id</td>
<td>username</td>
<td>password</td>
<td>age</td>
</tr>
<?php foreach($res as $key => $value){ ?>
<tr>
<td><?php echo $value['id'] ?></td>
<td><?php echo $value['username'] ?></td>
<td><?php echo $value['password'] ?></td>
<td><?php echo $value['age'] ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>