PHP PDO 连接操作数据库
目录:
PDO链接mysql
// PDO连接数据库
// 创建三个变量存放数据库地址,用户名和密码
$servername = '192.168.20.222';
$username = 'root';
$password = 'root';
// 创建链接
try {
$conn = new PDO("mysql:host=$servername",$username,$password);
echo '数据库连接成功';
}catch (PDOException $e){
echo $e->getMessage();
}
PDO断开链接
// 断开连接
$conn = null;
PDO创建数据库
$servername = '192.168.20.222';
$username = 'root';
$password = 'root';
try {
$conn = new PDO("mysql:host=$servername",$username,$password);
// 设置PDO为异常模式
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 设置创建数据库的sql语句
$sql = 'create database phplx';
// 使用exec();因为没有返回结果
$conn->exec($sql);
echo '数据库创建成功';
}catch (PDOException $e){
echo $e->getMessage();
}
PDO创建表
$servername = '192.168.20.222';
$username = 'root';
$password = 'root';
$dbname = 'phplx';
try {
// 链接数据库并选择数据库名
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$password);
// 设置PDO为异常模式
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
// 设置sql语句:
$sql = 'create table lxphp(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)';
// 使用exec()因为没有返回值
$conn->exec($sql);
echo '数据表创建成功';
}catch (PDOException $e){
echo $e->getMessage();
}
// 关闭数据库连接
$conn = null;
PDO插入数据
$servername = '192.168.20.222';
$username = 'root';
$passwd = 'root';
$dbname = 'phplx';
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$passwd);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = "insert into lxphp(firstname, lastname, email)
values ('zhang','san','1666666@qq.com')";
$conn->exec($sql);
echo '插入成功';
}catch (PDOException $e){
echo $e->getMessage();
}
$conn = null;
插入多条数据:
$servername = '192.168.20.222';
$username = 'root';
$passwd = 'root';
$dbname = 'phplx';
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$passwd);
// 设置异常模式
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
// 开始事务
$conn->beginTransaction();
// 执行sql
$conn->exec("insert into lxphp(firstname, lastname, email) values ('li','si','23865516@qq.com')");
$conn->exec("insert into lxphp(firstname, lastname, email) values ('wang','wu','12345678@qq.com')");
$conn->exec("insert into lxphp(firstname, lastname, email) values ('da','niu','87654321@qq.com')");
// 结束事务
$conn->commit();
echo '插入成功';
}catch (PDOException $e){
// 如果出现故障,则回滚事务
$conn->rollBack();
echo $e->getMessage();
预处理:
$servername = '192.168.20.222';
$username = 'root';
$passwd = 'root';
$dbname = 'phplx';
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$passwd);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
// 预处理sql并绑定参数
$stmt = $conn->prepare("insert into lxphp(firstname, lastname, email) values (:firestname,:lastname,:email)");
$stmt->bindParam(':firestname',$firestname);
$stmt->bindParam(':lastname',$lastname);
$stmt->bindParam(':email',$email);
// 插入数据
$firestname = 'zhang';
$lastname = 'san';
$email = '123456@qq.com';
$stmt->execute();
// 插入第二条数据
$firestname = 'li';
$lastname = 'si';
$email = '654321@qq.com';
$stmt->execute();
// 常如第三条数据
$firestname = 'wang';
$lastname = 'wu';
$email = '123466789@qq.com';
$stmt->execute();
echo '数据已插入';
}catch (PDOException $e){
echo $e->getMessage();
}
$conn = null;
PDO查询数据
try {
$sql="select * from cash";
// 有返回结果集,使用query函数,该函数返回结果为预处理对象。
$stmt = $conn->query($sql);
// 查询多条数据,设置返回为关联数组
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $v){
echo 'id为:'.$v['id'].',名字为:'.$v['name'].',财产为:'.$v['money'].'<br/>';
}
}catch (PDOException $e){
echo $e->getMessage();
}
PDO事务
// 连接数据库
$servername = '127.0.0.1';
$username = 'admin';
$password = '123456';
$dbname='www_myblog_com';
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$password);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
// 关闭pdo自动提交
$conn->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
// 开启事务
$conn->beginTransaction();
// 张三转出100元钱
$sql = "update cash set money=money-100 where name='张三'";
$row = $conn->exec($sql);
if (!$row){
// 若未成功转出,即$row不存在,则抛出异常
throw new PDOException('转出失败!');
}
// 若张三成功转出,李四加100元钱
$sql = "update cash set money=money+100 where name='李四'";
$row = $conn->exec($sql);
if (!$row){
throw new PDOException('转入失败!');
}
// 若两步都没问题则提交事务
$conn->commit();
echo '汇款成功';
}catch (PDOException $e){
echo $e->getMessage();
// 出现错误则回滚事务
$conn->rollBack();
}
// 开启自动提交
$conn->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
PDO预处理
什么是预处理?为了提高效率和防止sql注入等安全问题,使用预处理令mysql服务先对sql语句进行编译,等待传入参数,那么接下来我们传入参数时将不会在编译,参数里的逻辑运算将不会再执行。
?
:占位符,用来代表预处理的参数。
:
:一个冒号,用来声明预处理变量。
prepare()
:准备函数,将sql语句传递给sql服务端进行编译,并且返回预处理对象。
execute()
:执行函数,将参数传递给预处理并执行。
预处理插入数据(占位符实例):
<?php
include ('pdo.php');
try {
// ?为占位符
$sql = "insert into cash(name, money) VALUE (?,?)";
// 准备函数
$stmt = $conn->prepare($sql);
// 绑定预处理变量,三个参数,第一个为占位符,第二个为变量,第三个为数据类型一般不写
// 这里1代表第一个占位符
$stmt->bindParam(1,$name);
$stmt->bindParam(2,$money);
// 参数赋值
$name = '王五';
$money = 2000;
// 开始执行
$stmt->execute();
// // 简写,用该方法可以直接插入不绑定,使用?占位符的话,列表为索引列表
// $stmt->execute(array('老刘','3000'));
echo '数据已插入';
}catch (PDOException $e){
echo $e->getMessage();
}
预处理查询(使用单冒号)
fetch()、fetchall()
:提取一条数据、提取多条数据,可设置返回什么样的数组(一搬为’PDO::FETCH_ASSOC’关联数组)。
<?php
include ('pdo.php');
try {
$sql = "select * from cash where id=:id";
// 准备函数
$stmt = $conn->prepare($sql);
// 绑定变量
$stmt->bindParam(':id',$id);
// 变量赋值
$id=1;
// 执行查询
$stmt->execute();
// fetch()提取一条数据fetchall()提取多条数据,提取数据用res变量接收
// 这里的'PDO::FETCH_ASSOC'代表结果设为关联数组返回
$res = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($res);
// // 返回查询结果为几条数据
// var_dump($stmt->rowCount());
}catch (PDOException $e){
echo $e->getMessage();
}