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

来源:互联网 发布:nodejs调用java api 编辑:程序博客网 时间:2024/05/27 16:40

配置文件
首先我们将连接数据库需要的配置文件,单独出来,这样就不需要每次都去写,需要的时候,直接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 0
原创粉丝点击