0375-3382118

可以设置电话、微信、qq,并显示不同的图标

pdo连接mysql数据库_php通过Mysqli和PDO连接mysql数据详解

admin8个月前89

  前言

  在实际开发中,关于数据库操作类,很少是自己去写,大多是通过一些框架去实现,突然自己去写,还是需要借阅手册之类,于是我觉得有必要去总结一下,php连接mysql的方法,php连接mysql,可以通过mysql扩展、mysqli扩展,pdo扩展,因为高版本的php将移除mysql_系列方法,故在此只总结另外两种连接方式。首先我们得确保php的这两个扩展是否已经打开,查看php.ini配置文件如下:

  d5be619c81e7a419e5a3deeb882987c4.png

  提示,如有有的人说,我打开了扩展库(即去掉了,前面的';'),仍然一直提示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预处理

  主要讲解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?'';

  }

  //关闭

  $stmt->free_result();//释放结果

  $stmt->close();//关闭预编译的指令.

  $conn->close();//关闭连接

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

  f5ef732db8ce1699959debb77ed29e4d.png

  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()."

  ";

  die();

  }

  }

  return?self::$pdo;

  }

  }

  pdo支持预处理,推荐使用预处理方式,以防sql注入。

BC链 http://www.chinabic.com/?id=283 转载需授权!

网友评论