php通过Mysqli和PDO连接mysql数据详解

配置文件
首先我们将连接数据库需要的配置文件,单独出来,这样就不需要每次都去写,需要的时候,直接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预处理
主要讲解mysli对象编程的预处理,至于面向过程变成的预处理使用mysqli_prepare就不在介绍
$dbConf=include 'conf.php';  
//打开  
$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注入。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值