PDO相关操作
时间:2023-3-1 21:08 作者:wen 分类: PHP
<?php
//PDO(PHP Data Object)是PHP操作数据库的一个扩展
//对mysql,mysqlI的优势
//1.PDO为我们操作数据库提供了轻量级,一致性的借口,使用PDO不仅可以操作mysql数据库,还能操作oracle,mssql等数据库,因为PDO将访问不同数据库的方法封装了起来
//2.PDO扩展对执行SQL语句的安全性,效率方面都有一定的提升
//3.PHP官方推荐使用
//初始化PDO对象
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8";
//mysql:链接数据库类型
//host:主机地址
//port:端口
//dbname:数据库名
//charset:字符集
$username = 'root';
$password = "root";
$PDO = new PDO($dsn,$username,$password);
var_dump($PDO);
//使用PDO操作数据库
//增
$sql = "INSERT INTO study VALUES(null,0006,'admin',32,'语文',100)";
$result = $PDO->exec($sql);
//删
$sql = "DELETE from study where id=1";
$result = $PDO->exec($sql);
//改
$sql = "UPDATE study SET name='张三' WHERE id=2";
$result = $PDO->exec($sql);
//查
$sql = "SELECT * FROM study";
$result = $PDO->query($sql);//返回PDOStatement对象,从该对象的方法中查询数据
//查询一条记录
$res = $result->fetch(PDO::FETCH_ASSOC);
$PDO->fetch(); //查询一条数据
$PDO->fetchAll(); //查询说有数据
$PDO->fetchColumn(); //从结果集中的下一行返回单独的一列。
$PDO->quote(); //将字符串中的引号转义,并使用单引号包裹
/*PDO::FETCH_ASSOC 返回索引数组
PDO::FETCH_BOTH(默认) 返回关联和索引数组
PDO::FETCH_NUM 返回关联数组*/
//PDO异常
//获得异常信息函数
$error = $PDO->errorInfo();//返回错误代码和错误信息
$errCode = $PDO->errorCode();//返回错误代码
//PDO事物相关
//事物:逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败
$PDO->beginTransaction(); //开启事物
$PDO->commit();//提交
$PDO->rollBack();//回滚
//开启事物,下面转账的操作才属于事物
$PDO->beginTransaction();
//开始转账
$sql = "UPDATE study set money=money-300 where name = '张三'";
$res = $PDO->exec($sql);
$sql = "UPDATE study set money=money+300 where name='李四'";
$res1 = $PDO->exec($sql);
if($res && $res1){
$PDO->commit();
echo '转账成功';
}else{
$PDO->rollBack();
echo "转账失败";
}
//预处理
$PDO->lastInsetId(); //返回上一次插入语句的主键值
$PDO->prepare();
//预处理(编译sql语句),作用将SQL语句的结构固定住
//占位符(?,:id)
$sql = "DELETE FROM user where id=?";
//返回PDOStatement对象
$PDOStatement = $PDO->prepare($sql);
//使用真实的 数据替换之前的占位符,参数1代表的是第1个占位符
$PDOStatement->bindValue(1,'$value');
//执行,没有参数
$result = $PDO->execute();
//PDOStatement 对象的方法
//PDOStatement 对象,可以通过2种方法获得
/*1.通过执行$PDO->query();
2.通过执行$PDO->perpare();
1.$PDOStatement->fetchAll() 获得所有数据
2.$PDOStatement->fetch() 获取一条数据
3.$PDOStatement->fetchColumn(index) 获取一条记录的某个字段的值
4.$PDOStatement->closeCursor() 关闭游标,指针,通常当我们查询完数据后,要将游标恢复到初始位置上,便于下一次查询
5.$PDOStatement->bindVaue() 绑定数据
6.$PDOStatement->execute() 执行预处理SQL语句
7.$PDOStatement->errorInfo() 错误信息
8.$PDOStatement->errorCode() 错误代码
9.$PDOStatement->rowCount() 增删改受影响的记录数 */
//PDO异常处理
//自定义异常处理
class MyException extends Exception
{
//自定义异常类,提供备用方案
function __construct($argument)
{
# code...
}
}
?>
PDO链接数据库
<?php
$dbms='mysql'; //数据库类型
$host='localhost'; //数据库主机名
$dbName='test'; //使用的数据库
$user='root'; //数据库连接用户名
$pass=''; //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
echo "连接成功<br/>";
/*你还可以进行一次搜索操作
foreach ($dbh->query('SELECT * from FOO') as $row) {
print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
}
*/
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
PDO 查询
如果成功,PDO::query()返回PDOStatement对象,如果失败返回 FALSE 。
<?php
function getFruit($conn) {
$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
foreach ($conn->query($sql) as $row) {
print $row['name'] . "\t";
print $row['color'] . "\t";
print $row['calories'] . "\n";
}
}
PDOStatement::fetch — 从结果集中获取下一行
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* 运用 PDOStatement::fetch 风格 */
print("PDO::FETCH_ASSOC: ");
print("Return next row as an array indexed by column name\n");
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print("\n");
print("PDO::FETCH_BOTH: ");
print("Return next row as an array indexed by both column name and number\n");
$result = $sth->fetch(PDO::FETCH_BOTH);
print_r($result);
print("\n");
print("PDO::FETCH_LAZY: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_LAZY);
print_r($result);
print("\n");
print("PDO::FETCH_OBJ: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_OBJ);
print $result->NAME;
print("\n");
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* 获取结果集中所有剩余的行 */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
fetch_style 控制下一行如何返回给调用者
-
PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组
-
PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组
-
PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组
-
PDO::FETCH_OBJ:返回一个属性名对应结果集列名的匿名对象
PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
<?php
$dbh = new PDO('odbc:sample', 'db2inst1', 'ibmdb2');
/* 删除 FRUIT 数据表中满足条件的所有行 */
$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'");
/* 返回被删除的行数 */
print("Deleted $count rows.\n");
PDO::prepare — 准备要执行的SQL语句并返回一个 PDOStatement 对象
使用命名(:name)参数来准备SQL语句
<?php
/* 通过数组值向预处理语句传递值 */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
使用问号(?)参数来准备SQL语句
<?php
/* 通过数组值向预处理语句传递值 */
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();
标签: mysql