php通过Mysqli和PDO连接mysql数据详解
前言
在实际开发中,关于数据库操作类,很少是自己去写,大多是通过一些框架去实现,突然自己去写,还是需要借阅手册之类,于是我觉得有必要去总结一下,php连接mysql的方法,php连接mysql,可以通过mysql扩展、mysqli扩展,pdo扩展,因为高版本的php将移除mysql_系列方法,故在此只总结另外两种连接方式。首先我们得确保php的这两个扩展是否已经打开,查看php.ini配置文件如下:
提示,如有有的人说,我打开了扩展库(即去掉了,前面的';'),仍然一直提示mysqli_或pdo系列方法找不到,这很可能是因为你没有指定扩展库所在目录。找到extension_dir 参数,指定扩展所在目录即可
extension_dir = "D:/wamp/bin/php/php5.5.12/ext/"
配置文件
首先我们将连接数据库需要的配置文件,单独出来,这样就不需要每次都去写,需要的时候,直接include或者require包含进来就可以了。如果关于include与require不清楚的,可以查考http://blog.csdn.net/hsd2012/article/details/51089785
文件名conf.php
- return array(
- 'host'=>'127.0.0.1',
- 'user'=>'root',
- 'password'=>'',//因为测试,我就不设置密码,实际开发中,必须建立新的用户并设置密码
- 'dbName'=>'xxpt',
- 'charSet'=>'utf8',
- 'port'=>'3306'
);
通过mysqli扩展连接
mysqli有两种方式去连接mysql,且支持预处理,一种是面向对象,一种是面向过程。
1.面向过程连接mysql
- $dbConf=include 'conf.php';
- function openDb($dbConf){
- $conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']) or die('打开失败');
- //当然如上面不填写数据库也可通过mysqli_select($conn,$dbConf['dbName'])来选择数据库
- mysqli_set_charset($conn,$dbConf['charSet']);//设置编码
- return $conn;
- }
- function closeDb($conn){
- mysqli_close($conn);
- }
- //1.打开连接
- $conn=openDb($dbConf);
- //2query方法执行增、查、删、改
- $sql='SELECT t.`id1` from `t1` as t';
- /*************数据查询***************************/
- $rs=$conn->query($sql);
- //从结果集中读取数据
- //fetch_assoc:返回键值对形式,键位字段名、fetch_row:返回键值对形式,键值为数值、fetch_array:返回1和2两种形式的组合
- $data=array();//保存数据
- while($tmp=mysqli_fetch_assoc($rs)){//每次从结果集中取出一行数据
- $data[]=$tmp;
- }
- //对数据进行相应的操作
- print_r($data);//输出数据
- /*************数据插入***************************/
- $sql='INSERT INTO `t1`(`id1`,`id2`) VALUES(3,4);';
- $rs=$conn->query($sql);
- //3.关闭连接
- closeDb($conn);
2.面向对象方式连接mysql
- $dbConf=include 'conf.php';
- //打开
- $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);
- if(!$conn){
- die('数据库打开失败');
- }
- //执行增删改查
- /*************数据查询***************************/
- $sql='SELECT t.`id1` from `t1` as t';
- $rs=$conn->query($sql);//获取结果集
- //通过fetch_assoc、fetch_array、fetch_row从结果集中获取数据
- while ($tmp=$rs->fetch_assoc()) {
- print_r($tmp);
- }
- /*************数据删除***************************/
- $sql='DELETE FROM `t1` WHERE `id1`=3';
- $rs=$conn->query($sql);//获取结果集
- print_r($rs);$conn->close();
3.mysqli预处理
- //打开
- $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);
- if(!$conn){
- die('数据库打开失败');
- }
- //执行增删改查
- /*************数据查询***************************/
- $sql='SELECT * from `t1` as t WHERE id2>?';
- $stmt=$conn->prepare($sql);
- if(!$stmt){
- die('sql语句有问题');
- }
- //绑定参数
- $id2=2;
- $stmt->bind_param('i',$id2);//不能写成bind_param('i',2)
- //执行
- $stmt->execute();
- //将结果绑定发到指定的参数上
- $stmt->bind_result($id1, $id2);
- //获取结果
- while ($tmp=$stmt->fetch()) {
- print_r('id1='.$id1.',id2='.$id2);
- echo '</br>';
- }
- //关闭
- $stmt->free_result();//释放结果
- $stmt->close();//关闭预编译的指令.
- $conn->close();//关闭连接
预处理绑定参数中参数类型说明如下
php使用PDO方式连接mysql
- $dbConf=include 'conf.php';
- //打开
- $pdo=myPDO::getInstance($dbConf);
- /*************数据查询***************************/
- $sql='SELECT t.`id1` from `t1` as t';
- $rs=$pdo->query($sql);
- $data=$rs->fetchAll();//取出所有结果
- print_r($data);
- /*************数据更新***************************/
- $sql='UPDATE t1 SET t1.`id1`=11 WHERE t1.`id1`=1';
- $rs=$pdo->query($sql);
- /**
- * 数据库pdo连接
- */
- class myPDO{
- private static $pdo;
- private function __construct(){
- //code
- }
- private function __clone(){
- //code
- }
- /**
- * 获取实例化的PDO,单例模式
- * @return PDO
- */
- public static function getInstance($dbConf){
- if(!(self::$pdo instanceof PDO)){
- $dsn ="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName'].";charset=".$dbConf['charSet'];
- try {
- self::$pdo = new PDO($dsn,$dbConf['user'], $dbConf['password'], array(PDO::ATTR_PERSISTENT => true,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //保持长连接
- self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
- } catch (PDOException $e) {
- print "Error:".$e->getMessage()."<br/>";
- die();
- }
- }
- return self::$pdo;
- }
- }
pdo支持预处理,推荐使用预处理方式,以防sql注入。
php通过Mysqli和PDO连接mysql数据详解的更多相关文章
- MySQLi 和 PDO 连接 MySQL
PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...
- oracle通过dblink连接mysql配置详解(全Windows下)
关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚开始走了一段弯路,所以把这次的经验分享出来,让大家少走 ...
- 20.java-JDBC连接mysql数据库详解
1.JDBC介绍 jdbc(java database connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成. JDBC需要用到的类和接口有: Dri ...
- linux 下远程连接mysql命令详解
http://hi.baidu.com/aaxh/blog/item/49bcb78ffe3dfae4f01f36b2.html一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注 ...
- 使用 MySQLi 和 PDO 向 MySQL 插入多条数据
PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...
- 使用 MySQLi 和 PDO 向 MySQL 插入数据
PHP MySQL 插入数据 使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据. 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号 ...
- php PDO连接mysql
近期在linux装了新的环境.php5.6+mysql5.5+nginx. 然后用原来的mysql链接数据库出现的错误. 原因就是说连接数据库的方法太旧.建议我用mysqli和PDO来连接数据库. 好 ...
- //使用PDO连接mysql数据库
<?php //使用PDO连接mysql数据库 class pdo_con{ var $dsn = 'mysql:dbname=test; host:127.0.0.1'; va ...
- php之PDO连接mysql数据库,增删改查等等操作实例
我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严就有SQL注入风险,导致网站被攻击. 虽然可以用mysql_real_escape_string ...
随机推荐
- CSS布局 — 圣杯布局与双飞翼布局
圣杯布局 实现原理 html代码中,middle部分首先要放在container的最前部分,然后是left,right 将三者都设置 float:left, position:relative (因为 ...
- NEU 1496 Planar map 计算几何,点到线段距离 难度:0
问题 H: Planar map 时间限制: 1 Sec 内存限制: 128 MB提交: 24 解决: 22[提交][状态][讨论版] 题目描述 Tigher has work for a lon ...
- WeChat-扫码支付
官方文档API: 打开连接 主要实现功能,网站上调起 微信支付二维码图片. 所需引用基类API:Data.cs.WxPayApi.cs.HttpService.cs.Config.cs.Thought ...
- uname命令行
常用命令uname -v # uname -i #uname -a dream361@master:~$ uname -n #主机名称 master dream361@master:~$ uname ...
- 关于px em rem的一点小总结
2015-11-28 06:06:40 概念 都是CSS单位. px:像素 Pixel.像素 (计算机屏幕上的一个点) em:1em 等于当前的字体尺寸. 2em 等于当前字体尺寸的两倍. 例如,如果 ...
- Python3 数字Number(六)
Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: var1 = 1 var ...
- LVS模式三:NAT模式
一.NAT模式 NAT(Network Address Translation,网络地址转换).数据包传输过程就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地 ...
- xss 防御
系列 防御原则 第一.在输入方面对所有用户提交内容进行可靠的输入验证,提交内容包括URL.查询关键字.http头.post数据等 第二.在输出方面,在用户输内容中使用 <XMP>标签 还是 ...
- 初识jQuery(2)
1.DOM模型 1.1以对象描述文档的方式就是DOM 节点对象就是被称为DOM对象(标签对象) 1.2节点 元素节点(标签) 文本节点(标签内容) 属性节点(标签属性) 2.Jquery语法结构 $( ...
- 《利用Python进行数据分析》笔记---第2章--MovieLens 1M数据集
写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...