一、了解PDO访问异构数据库的方法(文件命名为SY9_1_PDO-query-exec.php)–PDO类实例化、PDO类query( )方法和exec( )方法。注意激活PDO :php_pdo_mysql.dll
<?php
try {
$db=new PDO("mysql:host=localhost;dbname=pxscj;", "root", "密码");
//实例化PDO类(创建PDO对象)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage();
//getMessage()--PDOException类中定义的方法
}
$db->exec("set names utf8mb4");
//exec()--PDO类的方法(执行没有结果集的SQL语句)
$query="insert into kcb values('606','PHP程序设计',6,48,3)"; //SQL语句
if($affCount = $db->exec($query)) {
//执行SQL语句$query--返回值为受影响记录数
echo "插入成功,受影响条数为:".$affCount."<br><br>";
}
$query="select * from kcb";
//SQL语句
foreach($db->query($query) as $row) {
//执行SQL语句$query--执行有结果集的SQL语句
echo "课程号:".$row[0]."<br>";
//返回的是一个PDOStatement类(型)的对象
echo "课程名:".$row[1]."<br>";
//还可以用PDOStatement类的方法fetch()行读
echo "开课日期:".$row[2]."<br>";
echo "学时:".$row[3]."<br><br>";
}
?>
二、PDO事务处理(文件命名为SY9_2_Transaction.php)
- 让MySQL支持InnoDB引擎:注释掉my.ini中的skip-innodb(重启MySQL) – 安装勾选则没有此项
- 更改表的引擎:(1) mysql -uroot -h127.0.0.1 -p111 (2) use pxscj; (3) alter table kcb type = InnoDB;
<?php
try {
$db=new PDO("mysql:host=localhost;dbname=pxscj","root","密码"); //实例化PDO类(创建PDO对象)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage(); //getMessage()--PDOException类中定义的方法
}
try {
$db->exec("set names utf8mb4"); //exec()--PDO类的方法(执行没有结果集的SQL语句)
$db->beginTransaction(); //***事务开始***
$affrows=$db->exec("insert into kcb values('506','UML系统分析',5,48,3)");
if(!$affrows)
throw new PDOException("插入失败1");
/*$affrows=$db->exec("insert into kcb values('606','PHP程序设计',6,32,2)");
if(!$affrows)
throw new PDOException("插入失败2");*/
echo "插入成功!";
$db->commit(); //***事务结束***--如果全部成功则提交
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo $e->getMessage();
$db->rollBack(); //回滚(要么成功要么失败)
}
?>
三、PDOStatement类的方法fetch( )的应用(文件命名为SY9_3_FETCH-ROW.php)。
<?php
try {
$db=new PDO("mysql:host=localhost;dbname=pxscj","root","密码"); //只需要改DSN(数据库源名)
}
catch (PDOException $e) {
//捕获异常--PDOException(Exception的简单重写)
echo "数据库连接失败:".$e->getMessage(); //getMessage()--PDOException类中定义的方法
}
$db->exec("set names utf8mb4"); //exec()--PDO类的方法(执行没有结果集的SQL语句)
$sql="select * from XSB where 性别=0"; //SQL语句
$result=$db->query($sql); //执行SQL语句$sql-返回一个PDOStatement类(型)对象
echo "<table border='1' align='center'>"; //是一个结果集
echo "<tr><td>学号</td><td>姓名</td><td>总学分</td></tr>";
while($row=$result->fetch(PDO::FETCH_NUM)) //fetch()是PDOStatement类的方法(从结果集行读)
{
//返回的是一个键名为数字(PDO::FETCH_NUM)数组
list($XH,$