首页
文章
留言
首页
文章
留言
PHP开发之PDO使用总结
2016 年 11 月 12 日
后端
PHP
PDO 是 PHP 数据对象(PHP Data Object)的缩写。并不能使用 PDO 扩展本身执行任何数据库操作,必须使用一个 database-specific PDO driver(针对特定数据库的 PDO 驱动)访问数据库服务器。PDO 并不提供数据库抽象,它并不会重写 SQL 或提供数据库本身缺失的功能,如果你需要这种功能,你需要使用一个更加成熟的抽象层。 **连接MySQL数据库:** ```php $server = "localhost"; $user = "root"; $pwd = "123456"; $db = "student"; try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $pwd); echo "连接成功"; } catch (PDOException $e) { echo $e->getMessage(); } ``` **创建MySQL数据库:** ```php $server = "localhost"; $user = "root"; $pwd = "123456"; $db = "student"; try { $conn = new PDO("mysql:host=$server;", $user, $pwd); // 设置 PDO 错误模式为异常 ,用于抛出异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "create database mydb"; $conn->exec($sql); echo "数据库创建成功
"; }catch (PDOException $e) { echo $sql . "
" . $e->getMessage(); } // 关闭连接 $conn = null; ``` **创建MySQL数据表:** ```php $server = "localhost"; $user = "root"; $pwd = "123456"; $db = "mydb"; try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $pwd); $conn -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = "create table myfriend( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL , email VARCHAR(50), sex CHAR(1) )"; $conn->exec($sql); echo "数据表创建成功"; }catch (PDOException $e) { echo $sql . "
" . $e->getMessage(); } $conn = null; ``` **插入单条记录:** ```php $server = "localhost"; $user = "root"; $pwd = "123456"; $db = "mydb"; try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $pwd); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "insert into myfriend values (1, '吴杰', '12345678@qq.com', '男')"; $conn->exec($sql); echo "数据插入成功"; }catch (PDOException $e) { echo $sql . "
" . $e->getMessage(); } $conn = null; ``` **插入多条记录:** ```php $server = "localhost"; $user = "root"; $pwd = "123456"; $db = "mydb"; try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $pwd); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 开始事务 $conn->beginTransaction(); // sql语句 $conn->exec("insert into myfriend values (3,'吴杰','1234568@gmail.com','男')"); $conn->exec("insert into myfriend values (4,'john','654321@gmail.com','男')"); $conn->exec("insert into myfriend values (5,'jack','7890123@gmail.com','男')"); // 提交事务 $conn->commit(); echo "多条记录提交成功"; }catch (PDOException $e) { // 如果插入失败则回滚事务 $conn->rollBack(); echo $e->getMessage(); } $conn = null; ``` **MySQL 预处理语句:** > 预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。 > 预处理语句的工作原理如下: > 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如: > INSERT INTO MyGuests(firstname, lastname, email) VALUES(?,?,?) > 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。 > 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。 > 相比于直接执行SQL语句,预处理语句有两个主要优点: > 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。 > 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。 > 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。 ```php $server = "localhost"; $user = "root"; $pwd = "123456"; $db = "mydb"; try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $pwd); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 预处理sql并绑定参数 $stmt = $conn->prepare("insert into myfriend VALUES (:id, :name, :email, :sex)"); $stmt->bindParam(':id',$id); $stmt->bindParam(':name',$name); $stmt->bindParam(':email',$email); $stmt->bindParam(':sex',$sex); // 填充数据,可以一次填充多条记录 $id = 6; $name = "ting"; $email = '123456@163.com'; $sex = "女"; $stmt->execute(); echo "预处理动作完成"; }catch (PDOException $e) { echo $e->getMessage(); } $conn = null; ```
0
相关文章
Redis缓存击穿、穿透、雪崩
PHP使用Kafka
PHP常用函数总结
Python爬虫之Beautiful Soup的使用
Redis、MemCache、MongoDB比较
全部分类
前端
后端
运维
架构
算法
数据库
移动应用
桌面应用
程序开发
热门标签
Linux
OpenResty
Nginx
NoSQL
Kubernetes
多线程
Redis
Shell
Composer
HTML
Kafka
MySQL
CSS
Lua
Git
PHP
JavaScript
C++
MongoDB
macOS
Objective-C
iOS
Supervisor
Elasticsearch
GUI
Sphinx
爬虫
CentOS
Python
Qt
Docker
Android
热门文章
PHP开发之字符串处理
Redis基本使用总结
Redis、MemCache、MongoDB比较
iOS开发之面向对象
Supervisor使用总结
iOS开发之多线程
PHP使用Kafka
iOS开发之定时执行任务
macOS常用命令
OpenResty+Lua+Kafka收集日志