PHP连接数据库

2018-06-06  本文已影响0人  DarlingHH

PHP连接数据库有许多方法:

1、mysqli(面向过程)

$conn = mysqli_connect("localhost","账号","密码") or die("数据库连接失败!失败信息:".mysqli_connect_error($conn));

mysqli_select_db($conn, "数据库名") or die("数据库选择失败!");

 mysqli_set_charset($conn,"utf8") or die("数据库编码集设置失败!");

$sql="sql语句";

 $res = mysqli_query($conn,$sql);

 $this::$returnGetDeviceCID=new ArrayList();

 while($row = mysqli_fetch_array($res))

 {

//处理数据

}

 mysqli_close($conn);

2、mysqli(面向对象)

 /** * 处理数据库的扩展库 

 * * mysqli的预处理语句

 * mysqli_stmt预处理类(推荐使用的类)

 * 优点:(mysqli和mysqli_result类的相比) 

 * 1.性能:mysqli_stmt高(执行多条类型相同不同数据的sql,不用多次编译sql)

 * 2.安全上:sql注入问题(用?占位符来解决)

 * 使用(详情见代码):

 * ?占位符绑定:(邦定时要注意,后写的信息要与定好的类型匹配否则无法执行)

 * 例子:$stmt->bind_param("isd",$id,$name,$price); 

 * i:整型

 * d:double 

 * s:string 

 * b:二进制数

 * 返回mysqli_stmt预处理类对象:$stmt = $mysqli->prepare($insert) 

 * 一次性将结果全取出来:store_result() 

 * */

 $mysqli = new mysqli("localhost","用户名","密码","数据库名");

 if (mysqli_connect_errno()) { 

 echo "连接失败:" . mysqli_connect_error(); 

 $mysqli = null; exit(); 

 } 

 $mysqli->set_charset('utf8'); 

 $mysqli->autocommit(true);

 $sql = "SELECT pushId,CID,deviceToken FROM device_cid WHERE UID=? AND deviceStatus=1 AND pushStatus=1;";

//1.返回mysqli_stmt预处理类对象 $stmt = $mysqli->stmt_init();

//准备一条语句放在服务器上 $stmt->prepare($sql);

//2.mysqli的方式(简化了操作)

//$stmt = $mysqli->prepare($sql); 

 $stmt->bind_param("s", $UID);

//绑定之后开始执行了

 if ($stmt->execute()) { 

 $this::$returnGetDeviceCID = new ArrayList(); 

 $stmt->store_result();

 echo "记录个数:".$stmt->num_rows."行";            

$stmt->bind_result($pushId,$CID,$deviceToke);            

while ($stmt->fetch()){  

              echo "pushId-->".$pushId." CID-->".$CID." deviceToke-->".$deviceToke; 

               $this::$deviceCID = new DeviceCID('', '', $pushId, $CID, $deviceToke,'', '');

                $this::$returnGetDeviceCID->Add($this::$deviceCID);           

 }       

 } else {       

     echo "执行失败";      

  }      

  $stmt->free_result();      

  $stmt->close();       

 $mysqli->close();

3、PDO

// TODO: Implement getDeviceCID() method.

$dbms = 'mysql';   //数据库类型        

$host = 'localhost'; //数据库主机名        

$dbName = '数据库名';    //使用的数据库      

$user = '用户名';      //数据库连接用户名      

$password = '密码';          //对应的密码      

$dsn = "$dbms:host=$host;

dbname=$dbName";      

  try {           

$dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => true)); //初始化一个PDO对象,且是长连接。          

$dbh->query("set names utf8"); //设置数据库编码为utf8          

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//设置数据库句柄属性:(错误报告,抛出 exceptions 异常)。            $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);//设置数据库句柄属性:启用或禁用预处理语句的模拟。强制PDO总是模拟预处理语句(如果为 TRUE ),或试着使用本地预处理语句(如果为 FALSE)。         

 $stmt = $dbh->prepare("SELECT pushId,CID,deviceToken FROM device_id WHERE UID=:UID AND deviceStatus=1 AND pushStatus=1;");       $stmt->bindParam(':UID', $UID);         

 if ($stmt->execute()) {           

 $stmt->setFetchMode(PDO::FETCH_ASSOC);//设置所有的获取模式,全部是关联数组,也可以写在fetch里面(PDO::FETCH_ASSOC),不写就是默认的类型关联和索引都返回            

 $this::$returnGetDeviceCID=new ArrayList();       

   while ($row = $stmt->fetch()) {

//获取所有查出来的值  循环                

    $this::$deviceCID = new DeviceCID('', '', $row["pushId"], $row["CID"], $row["deviceToken"], '', '');     

               $this::$returnGetDeviceCID->Add($this::$deviceCID);      

          }          

  }     

   } catch (PDOException $e) {         

   die ("Error!: " . $e->getMessage() . "");     

   }       

 return $this::$returnGetDeviceCID;

上一篇下一篇

猜你喜欢

热点阅读