PHP操作MYSQL--PDO
感觉比直接弄SQL语句高级,但还不到ORM的封装。
一步一步进化。
app.json
{"db": {"user": "root","password": "xxxx","host": "10.2.3.4","port": "3306","dbname": "bookstore"} }
config.php
<?phpnamespace Bookstore\Utils;use Bookstore\Exceptions\NotFoundException;require_once __DIR__ . '/NotFoundException.php';class Config {private $data;//类静态变量,保证变量唯一性private static $instance;//构造函数私有化,类外部不可以调用.private function __construct() {$json = file_get_contents(__DIR__ . '/app.json');$this->data = json_decode($json, true);}//单例模式,保证只实例化一个类.public static function getInstance() {if (self::$instance == null) {//是可以自己实例化自己的.self::$instance = new Config();}return self::$instance;}public function get($key) {if (!isset($this->data[$key])) {throw new NotFoundException("Key $key not in config.");}return $this->data[$key];} } ?>
test.php
<?php //使用命名空间,易于在大型应用中管理和组织php类.use Bookstore\Utils\Config;//命名空间可以直接use,但如果这个命名空间没有在标准约定位置,且没有自动载入的话,需要使用require来手工定位一下. require_once __DIR__ . '\Config.php';header("content-type:text/html;charset=utf-8"); $dbConfig = Config::getInstance()->get("db");$connStr = "mysql:host={$dbConfig['host']};port={$dbConfig['port']};dbname={$dbConfig['dbname']};charset=utf8";$db = new \PDO($connStr, $dbConfig['user'], $dbConfig['password']); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);$query = 'SELECT * FROM book WHERE author = :author'; $statement = $db->prepare($query); $statement->bindValue('author', 'George Orwell'); $statement->execute(); $rows = $statement->fetchAll(); foreach ($rows as $row) {var_dump($row); } echo "<br/>"; $query = <<<SQL INSERT INTO book(isbn, title, author, price) VALUES(:isbn, :title, :author, :price) SQL; $statement = $db->prepare($query); $params = ['isbn' => '9781413108614','title' => 'Iliad','author' => 'Homer','price' => 9.25 ]; $statement->execute($params); $result = $db->exec($query); echo $db->lastInsertId(); echo "<br/>";function addBook(int $id, int $amount=1):void {$query = 'UPDATE book SET stock = stock + :n WHERE id = :id';$statement = $db->prepare($query);$statement->bindValue('id', $id);$statement->bindValue('n', $amount);if (!$statement->execute()) {throw new Exception($statement->errorInfo()[2]);} }function addSale($db, int $userId, array $bookIds):void {$db->beginTransaction();try {$query = 'INSERT INTO sale(customer_id, date)'. 'VALUES(:id, NOW())';$statement = $db->prepare($query);if (!$statement->execute(['id'=> $userId])) {throw new Exception($statement->errorInfo()[2]);}$saleId = $db->lastInsertId();$query = 'INSERT INTO sale_book(book_id, sale_id)'. 'VALUES(:book, :sale)';$statement = $db->prepare($query);$statement->bindValue('sale', $saleId);foreach ($bookIds as $bookId) {$statement->bindValue('book', $bookId);if (!$statement->execute()) {throw new Exception($statement->errorInfo()[2]);}}$db->commit();} catch (Exception $e) {$db->rollback();throw $e;} }try {addSale($db, 1, [1, 2, 300]); } catch (Exception $e) {echo 'Error adding sale: ' . $e->getMessage(); }try {addSale($db, 1, [1, 2, 3]); } catch (Exception $e) {echo 'Error adding sale: ' . $e->getMessage(); }?>
输出
array(6) { ["id"]=> string(1) "1" ["isbn"]=> string(13) "9780882339726" ["title"]=> string(4) "1984" ["author"]=> string(13) "George Orwell" ["stock"]=> string(2) "12" ["price"]=> string(3) "8.7" } array(6) { ["id"]=> string(1) "3" ["isbn"]=> string(13) "9780736692427" ["title"]=> string(11) "Animal Farm" ["author"]=> string(13) "George Orwell" ["stock"]=> string(1) "8" ["price"]=> string(4) "4.06" } 0 Error adding sale: Cannot add or update a child row: a foreign key constraint fails (`bookstore`.`sale_book`, CONSTRAINT `sale_book_ibfk_2` FOREIGN KEY (`book_id`) REFERENCES `book` (`id`))
转载于:https://www.cnblogs.com/aguncn/p/11133713.html
PHP操作MYSQL--PDO相关推荐
- php使用pdo操作mysql数据库实例_php5使用pdo连接数据库实例
本文为大家介绍下php pdo的用法. 一,pdo简介 pdo(php data object) 是php 5 中加入的东西,是php 5新加入的一个重大功能,因为在php 5以前的php4/php3 ...
- PDO操作MYSQL
<?php//PDO操作mysql数据库 增删改查//1.准备dsn$mysql_dsn="mysql:host=localhost;dbname=cz;charset=utf8&qu ...
- php mysql PDO 查询操作的实例详解
php mysql PDO 查询操作的实例详解 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- php使用pdo操作mysql数据库实例_php使用PDO操作MySQL数据库实例_PHP
本文实例讲述了php使用PDO操作MySQL数据库的方法.分享给大家供大家参考.具体分析如下: PDO是mysql数据库操作的一个公用类,我们不需要进行自定类就可以直接使用pdo来操作数据库,但是在p ...
- php mysql 替换 pdo,php操作MySQL数据库之PDO方式
这篇文章主要介绍了关于php操作MySQL数据库之PDO方式 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下基本使用 1)连接数据库$pdo = new PDO("mysql ...
- pdo mysql 绑定查询_php mysql PDO 查询操作的实例详解
php mysql PDO 查询操作的实例详解 php mysql PDO 查询操作的实例详解 这篇文章主要介绍了php mysql PDO 查询操作的实例详解的相关资料,希望通过本文能帮助到大家,需 ...
- [share]PDO操作MySql类
转载自 分享 最终编辑 liujijunbd 为了让自己的数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类: 由于pdo可以连接现在流行的各种数据库,所以单独的写个配置类类来完成不 ...
- php mysql pdo use_PHP连接到mysql的方法--mysqli和PDO
php连接到mysql数据库,经典的方式就是使用mysql_connect(),具体代码如下: mysql_connect($db_host, $db_user, $db_pass) or die(m ...
- php mysql增修删_PHP mysql PDO增、删、查、改
1 建立连接<?php $dbh=newPDO('mysql:host=localhost;port=3306; dbname=test',$user,$pass,array( PDO::ATT ...
- mysql pdo教程_php中mysql连接方式PDO使用详解
本文主要详细介绍了PHP中mysql的连接方式PDO的各种使用方法,算是个人的一个小结,如有遗漏还请告之,有需要的小伙伴来参考下吧. PDO常用方法: PDO::query()主要用于有记录结果返回的 ...
最新文章
- LeetCode 94. Binary Tree Inorder Traversal--二叉树中序遍历--递归,迭代--C++,Python解法
- SharePoint 2013 术语和术语集介绍
- spark任务优先级设置:spark.yarn.priority
- mysql在线复制_mysql如何在线修改主从复制选项
- python 多进程 内存增长_python 多进程 内存 copy-on-write
- sql库缓存命中率_SQL Server内存性能指标–第4部分–缓冲区高速缓存命中率和页面寿命期望
- 在电脑窗口中截取长图/滚动截图
- Office Professional Plus 2010 产品密钥
- Limelight完成了对雅虎Edgecast的收购,合并后的公司更名为Edgio,成为全球边缘解决方案的领导者
- iphone计算机的声音怎么办,苹果计算机安装win10系统的扬声器无声音该怎么解决...
- C语言获取执行程序所在的目录路径
- Visio(一) Visio 键盘的上下左右快捷键 没办法移动图标了:取消掉Scroll lock指示灯即可。
- 【Windows 问题系列第 14 篇】如何删除 Win10 系统自带的微软拼音输入法
- 手把手教你六类网线水晶头接法,超详细教程
- job处理缓慢的性能问题排查与分析(r4笔记第18天)
- Ubuntu配置socks5转http
- 单点登录简单原理(应用多系统)
- 考研英语 长难句训练day68
- 网页素材大宝库:40套高质量的网站纹理背景素材
- Android 微信扫码登陆