php类模块引擎PDO操作MySQL数据库简单阐述
PDO是什么呢?
通俗说就是别人写的一个“数据库操作工具类”,它非常强大,可以应对市面上几乎所有主流数据库,
具体应用时候有这样一个关系:
即,要操作某种数据,就得去“打开”对应的pdo引擎。
在php.ini的配置文件中,无非就是一个“模块”而已,我们只需要把分号删掉就表示开启!如下:
改为:
使用pdo连接mysql数据库
- $dsn = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";
- $opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names 连接编码’);
- $pdo = new pdo($dsn, "用户名", "密码", $opt);
可见,返回的是一个pdo对象,
pdo对象的使用(常见方法)
$result = $pdo->query(“返回结果集的sql语句”);
结果:
成功:就是一个pdo结果集对象(见后续);
失败:false;
$result = $pdo->exec(“增删改的sql语句”);
结果: true(表示成功),false(表示失败);
$pdo = null; //销毁该对象;
其他操作
- $pdo->lastInsertId();
获取最后添加的id值
- $pdo->beginTransaction();:
开启一个事务
- $pdo->commit()
提交一个事务
- $pdo->rollBack();
回滚一个事务;
- $pdo->inTransaction();
判断当前行是否在事务中,返回true/false
- $pdo->setAttribute(属性名,属性值);
设置pdo对象的属性值;
举例:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
pdo的错误处理
静默模式
默认情况下,pdo采用“静默模式”处理错误:
就是发生了错误后,并不提示,而只是返回false。我们需要在程序中去判断返回是否为fale,然后,如果是false,再去“主动”获取错误信息。——跟mysql一样!
对比mysql:
$sql = “updateeeee tab set name = ‘abc'; ”;
$result = mysql_query($sql); //这里,执行该sql语句,肯定出错
if( $result === false){
echo “发生错误:” . mysql_error();
}
else{......}
则对pdo来说,大致如此:
$sql = “updateeeee tab set name = ‘abc’ ; ”;
$result = $pdo->exec ($sql); //这里,执行该sql语句,肯定出错
if( $result === false){
echo “发生错误:” . $pdo->errorInfo(); //这里只是示意;
//实际情况是:$pdo->errorInfo()返回的是一个“数组”,其中的下标为3的项,才是错误提示内容
}
else{......}
异常模式
可以简单理解为:适应面向对象语法的处理错误的一种语法结构。如下所示:
try{
在这里,可以执行“可能出错”的语句(多条也可以);
一旦发生错误,就会终止当前范围的后续程序执行,
而立即跳转到catch部分——处理错误!
}
catch( Exception $e ){
//一旦发生错误,就会进入这里,此时,并会生成一个“错误对象”;
//该错误对象,就是系统类Exception的一个实例:它包含了错误信息。
}
pdo要使用异常模式,就得专门设置(因为其默认是静默模式):
pdo的结果集对象(PDOStatement)
pdo的结果集对象从哪里来?
来自pdo对象执行“返回数据集的sql语句”并成功的时候,得到的就是pdo的结果集对象。
$stmt = $pdo->query(“select ..... “); //如果执行成功,则$stmt就是pdo的结果集对象
pdo结果集对象的常用方法
- $stmt = $pdo->query(“select ...... ”);//这是获得结果集
- $stmt->rowCount() ; //得到结果集的行数
- $stmt->columnCount() ; //得到结果集的列数
- $stmt->fetch( [返回类型] ); //从结果集中取出“一行”数据;
取出的结果,由其中的“返回类型”来决定,常用的有:
PDO::FETCH_ASSOC:表示关联数组
PDO::FETCH_NUM:表示索引数组
PDO::FETCH_BOTH:表示前二者皆有,这是默认值
PDO::FETCH_OBJ:表示对象
- $stmt->fetchAll([返回类型]);一次性获取结果集中的所有数据,返回的是一个二维数组
- $stmt->fetchColumn( [$i] );获取结果集中的“下一行”数据的第$i个字段的值,结果是一个“标量数据”
- $stmt->fetchObject();
- $stmt->errorCode();:pdo结果集的错误代号
- $stmt->errorInfo(); pdo结果集的错误信息(是一个数组)
- $stmt->closeCursor(); 关闭结果集(相当于mysql_close() )
pdo中的预处理语法
什么叫预处理语法
就是,为了“重复执行”多条结构类似的sql语句,而将该sql语句的形式“进行预先处理”(编译);
该sql语句的“形式”中,含有“未给定的数据项”。
然后,到正式执行的时候,只要给定相应的形式上的“数据项”,就可以更快速方便执行。
比如(有两种预定义语法):
语法1:
$sql = “select * from tab where id = ? “; //这里这个“?”就是未给定的数据项;这里通常叫做“占位符”
//也可以是多个问好。
语法2:
$sql = “select * from tab where id = :v1 and name = :v2 “; //这里这个“:v1”和 “:v2” 就是未给定的数据项;通常这里叫做“命名参数”;
怎么使用?
分3步:
1,对含预处理语法的sql语句进行“预处理”:
$stmt = $pdo->prepare( $sql ); //
2, 对上述预处理的结果对象($stmt)的未赋值数据,进行赋值:
$stmt->bindValue( 数据项1, 值1);
$stmt->bindValue( 数据项2, 值2);
。。。。。。
3, 执行;
$stmt->execute();
这样之后,该sql语句就算正式完成!
php类模块引擎PDO操作MySQL数据库简单阐述的更多相关文章
- Python工具类(一)—— 操作Mysql数据库
如何调用直接看__main__函数里如何调用此工具类就阔以啦! # encoding=utf-8 import pymysql # 导入所有Mysql配置常量,请自行指定文件 from conf.se ...
- PDO操作mysql数据库(一)
PHP连接mysql数据库: <?php$server = "localhost";$user = "root";$pwd = "123456& ...
- PDO操作mysql数据库(二)
从 MySQL 数据库读取数据 <?php $server = "localhost"; $user = "root"; $pwd = "123 ...
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- python操作三大主流数据库(1)python操作mysql①windows环境中安装python操作mysql数据库的MySQLdb模块mysql-client
windows安装python操作mysql数据库的MySQLdb模块mysql-client 正常情况下应该是cmd下直接运行 pip install mysql-client 命令即可,试了很多台 ...
- Python MySQLdb模块连接操作mysql数据库实例_python
mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...
- php之PDO连接mysql数据库,增删改查等等操作实例
我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严就有SQL注入风险,导致网站被攻击. 虽然可以用mysql_real_escape_string ...
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
随机推荐
- Asp.net中FileUpload控件实现图片上传并带预览显示
单一图片上传——“选择”+“上传”,.NET默认模式: 1.实现原理: 采用FileUpload控件默认的使用方式,先由“选择”按钮选择图片,然后单击“上传”按钮完成上传,并可在“上传”按钮的 ...
- 836. Rectangle Overlap 矩形重叠
[抄题]: A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of i ...
- 【转】HttpRuntime的认识与加深理解
原文:http://www.cnblogs.com/whtydn/archive/2009/10/16/1584418.html 下面最先介绍HttpRuntime的Web.config里的配置 ...
- 如何配置Notepad++的C_C++语言开发环境
相信很多人用notepad++,但把其配置成为C/C++还是需要小折腾一下的.本人在网上找了很长时间,也没有一个统一的答案,而且很多人说的方法根本不管用,而且也不够通用,所以还是自己摸索了一下,分享给 ...
- 03 解析库之Beautifulsoup模块
Beautifulsoup模块 一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式 ...
- 连接redis
- laravel数据库操作
一.配置文件路径:/.env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT= DB_DATABASE=test DB_USERNAME=root DB_P ...
- 另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新
目的:vue-cli构建的vue单页面应用,某些特定的页面,实现前进刷新,后退不刷新,类似app般的用户体验.注: 此处的刷新特指当进入此页面时,触发ajax请求,向服务器获取数据.不刷新特指当进入此 ...
- Linux多线程服务端编程 使用muduo C++网络库 学习笔记 日志log
代码来自陈硕开源代码库 muduo中 地址是https://github.com/chenshuo/muduo #pragma once #include <string> #define ...
- SQL0973N在 "<堆名>" 堆中没有足够的存储器可用来处理语句
SQL0973N在 "<堆名>" 堆中没有足够的存储器可用来处理语句. 解释: 已使用此堆的所有可用内存.不能处理该语句. 用户响应: 接收到此消息(SQLCODE)后 ...