zoukankan      html  css  js  c++  java
  • 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

     
    1. return array(  
    2.         'host'=>'127.0.0.1',  
    3.         'user'=>'root',  
    4.         'password'=>'',//因为测试,我就不设置密码,实际开发中,必须建立新的用户并设置密码  
    5.         'dbName'=>'xxpt',  
    6.         'charSet'=>'utf8',  
    7.             'port'=>'3306'  
     
    );
    
    
    

    通过mysqli扩展连接

    mysqli有两种方式去连接mysql,且支持预处理,一种是面向对象,一种是面向过程。

    1.面向过程连接mysql

     
    1. $dbConf=include 'conf.php';  
    2. function openDb($dbConf){  
    3.     $conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']) or die('打开失败');  
    4.     //当然如上面不填写数据库也可通过mysqli_select($conn,$dbConf['dbName'])来选择数据库  
    5.     mysqli_set_charset($conn,$dbConf['charSet']);//设置编码  
    6.     return $conn;  
    7. }  
    8. function closeDb($conn){  
    9.     mysqli_close($conn);  
    10. }  
    11.   
    12. //1.打开连接  
    13. $conn=openDb($dbConf);  
    14. //2query方法执行增、查、删、改  
    15. $sql='SELECT t.`id1` from `t1` as t';  
    16. /*************数据查询***************************/  
    17. $rs=$conn->query($sql);  
    18. //从结果集中读取数据  
    19. //fetch_assoc:返回键值对形式,键位字段名、fetch_row:返回键值对形式,键值为数值、fetch_array:返回1和2两种形式的组合  
    20. $data=array();//保存数据  
    21. while($tmp=mysqli_fetch_assoc($rs)){//每次从结果集中取出一行数据  
    22.     $data[]=$tmp;  
    23. }  
    24. //对数据进行相应的操作  
    25. print_r($data);//输出数据  
    26.   
    27. /*************数据插入***************************/  
    28. $sql='INSERT INTO `t1`(`id1`,`id2`) VALUES(3,4);';  
    29. $rs=$conn->query($sql);  
    30. //3.关闭连接  
    31. closeDb($conn);  

    2.面向对象方式连接mysql

     
    1. $dbConf=include 'conf.php';  
    2. //打开  
    3. $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);  
    4. if(!$conn){  
    5.     die('数据库打开失败');  
    6. }  
    7. //执行增删改查  
    8. /*************数据查询***************************/  
    9. $sql='SELECT t.`id1` from `t1` as t';  
    10. $rs=$conn->query($sql);//获取结果集  
    11. //通过fetch_assoc、fetch_array、fetch_row从结果集中获取数据  
    12. while ($tmp=$rs->fetch_assoc()) {  
    13.     print_r($tmp);  
    14. }  
    15. /*************数据删除***************************/  
    16. $sql='DELETE FROM `t1` WHERE `id1`=3';  
    17. $rs=$conn->query($sql);//获取结果集  
    18. print_r($rs);$conn->close();  

    3.mysqli预处理

    主要讲解mysli对象编程的预处理,至于面向过程变成的预处理使用mysqli_prepare就不在介绍
    $dbConf=include 'conf.php';  
    1. //打开  
    2. $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);  
    3. if(!$conn){  
    4.     die('数据库打开失败');  
    5. }  
    6. //执行增删改查  
    7. /*************数据查询***************************/  
    8. $sql='SELECT * from `t1` as t WHERE id2>?';  
    9. $stmt=$conn->prepare($sql);  
    10. if(!$stmt){  
    11.     die('sql语句有问题');  
    12. }  
    13. //绑定参数  
    14. $id2=2;  
    15. $stmt->bind_param('i',$id2);//不能写成bind_param('i',2)  
    16. //执行  
    17. $stmt->execute();  
    18. //将结果绑定发到指定的参数上  
    19. $stmt->bind_result($id1, $id2);  
    20. //获取结果  
    21. while ($tmp=$stmt->fetch()) {  
    22.     print_r('id1='.$id1.',id2='.$id2);  
    23.     echo '</br>';  
    24. }  
    25. //关闭  
    26. $stmt->free_result();//释放结果    
    27. $stmt->close();//关闭预编译的指令.    
    28. $conn->close();//关闭连接    

    预处理绑定参数中参数类型说明如下

    php使用PDO方式连接mysql

     
    1. $dbConf=include 'conf.php';  
    2. //打开  
    3. $pdo=myPDO::getInstance($dbConf);  
    4. /*************数据查询***************************/  
    5. $sql='SELECT t.`id1` from `t1` as t';  
    6. $rs=$pdo->query($sql);  
    7. $data=$rs->fetchAll();//取出所有结果  
    8. print_r($data);  
    9. /*************数据更新***************************/  
    10. $sql='UPDATE t1 SET t1.`id1`=11 WHERE t1.`id1`=1';  
    11. $rs=$pdo->query($sql);  
    12.   
    13. /** 
    14.  * 数据库pdo连接 
    15.  */  
    16. class myPDO{      
    17.     private static $pdo;  
    18.       
    19.     private function __construct(){  
    20.         //code  
    21.     }  
    22.     private function __clone(){  
    23.         //code  
    24.     }  
    25.     /** 
    26.      * 获取实例化的PDO,单例模式 
    27.      * @return PDO 
    28.      */  
    29.     public static function getInstance($dbConf){  
    30.         if(!(self::$pdo instanceof PDO)){  
    31.             $dsn ="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName'].";charset=".$dbConf['charSet'];  
    32.             try {  
    33.                 self::$pdo = new PDO($dsn,$dbConf['user'], $dbConf['password'], array(PDO::ATTR_PERSISTENT => true,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //保持长连接  
    34.                 self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
    35.             } catch (PDOException $e) {  
    36.                 print "Error:".$e->getMessage()."<br/>";  
    37.                 die();  
    38.             }  
    39.         }  
    40.         return self::$pdo;  
    41.     }  
    42. }  
    pdo支持预处理,推荐使用预处理方式,以防sql注入。
  • 相关阅读:
    分时区查询问题解决
    .htaccess伪静态实例分享
    net mvc 小目标
    PHP中钩子函数的实现与认识
    session
    修改net基本三层 动软生产
    格式化问题
    数据字典
    关联数据和formatter问题-easyui+微型持久化工具
    说说JSON和JSONP,也许你会豁然开朗
  • 原文地址:https://www.cnblogs.com/hellohell/p/5718205.html
Copyright © 2011-2022 走看看