Correcting teacher:Guanhui
Correction status:qualified
Teacher's comments:非常好!没什么问题,一定要勤加练习,多看看手册。
本例要求:使用pdo类的对象去连接数据库,然后使用PDO对象中的prepare()方法获取PDOStatement对象, 接着使用PDOStatement对象的成员方法将获得的结果集中的数据(二维数组)遍历出来,渲染到表格中。
需要遍历的数据表如下:
<?php
// 1. 定义使用PDO时需要用到的一些数据库常量
// 定义主机名
define('DB_HOST','php.edu');
// 定义连接数据库的用户名
define('DB_USER','root');
// 定义连接数据库的密码
define('DB_PWD','root');
// 定义数据库的端口号
define('DB_PORT','3306');
// 定义数据库的类型
define('DB_TYPE','mysql');
// 定义数据库的名称
define('DB_NAME','first');
// 定义数据库的编码方式
define('DB_CHARSET','utf8');
// 定义数据库的数据源名(DSN),包括数据类型,主机名,端口号和数据库名称等。
define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
// 2. 连接数据库
try {
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
// var_dump($pdo);
//捕捉特定于数据库信息的PDOEXCEPTION 异常
} catch (Throwable $th) {
echo $th->getMessage();
}
//捕捉拥有Throwable接口的错误或者其他异常
catch (PDOException $e) {
echo $e->getMessage();
}
// 3. sql语句查询
$sql = "SELECT `id`,`username`,`password`,`sex`,`age`,`tel` FROM `student`";
// 4. 准备执行sql语句,并得到一个对象
$stmt = $pdo->prepare($sql);
// 得到一个PDOStatement对象
// var_dump($res);
// 5.执行
$stmt->execute();
// 指定得到一个结果集,为关联数组
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
// var_dump($res);
// 6. 遍历数组
if (!empty($res)) {
$table = <<<EOF
<table border="1" align="center" style="border-collapse:collapse;width:500px;text-align:center;margin-top:50px;">
<caption><h2>学生信息表</h2></caption>
<tr>
<td>序号</td>
<td>姓名</td>
<td>密码</td>
<td>性别</td>
<td>年龄</td>
<td>电话</td>
</tr>
EOF;
foreach ( $res as $key=>$value ) {
$table.="<tr>";
$table.="<td>{$value['id']}</td>";
$table.="<td>{$value['username']}</td>";
$table.="<td>{$value['password']}</td>";
$table.="<td>{$value['sex']}</td>";
$table.="<td>{$value['age']}</td>";
$table.="<td>{$value['tel']}</td>";
$table.="</tr>";
}
$table.="</table>";
echo $table;
}
经过mysqli和PDO的学习,我觉得最重要的就是要了解整个执行过程的流程,当对它的流程完全了解之后,就是对类中的函数或属性或方法加以应用,流程的每个环节可能都对应着不同的类,要使用好类中的方法,结合var_dump()的使用,能够更加清楚的知道此变量或结果属于哪一类,从而更好的使用函数或方法。