中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中PDO連接數據庫的操作步驟

發布時間:2020-11-09 14:20:25 來源:億速云 閱讀:340 作者:小新 欄目:編程語言

這篇文章主要介紹了PHP中PDO連接數據庫的操作步驟,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

PDO—數據庫抽象層

簡介:PDO擴展為PHP訪問數據庫定義了一個輕量級的、一致性的接口,PDO解決了數據庫連接不統一的問題。

一、 PDO簡介

本章主要介紹PDO的安裝與配置,以及使用PDO連接數據庫的方法。

1-1PDO簡介

PDO是PHP Data Object(PHP數據對象)的簡稱,它是與PHP5.1版本一起發布的,目前支持的數據庫包括Firebird、FreeTDS、Interbase、MySQL、MS SQL Server、ODBC、Oracle、Postgre SQL、SQLite和Sybase。當操作不同數據庫時,只需要修改PDO中的DSN(數據庫源) ,即可使用PDO的統一接口進行操作。

PDO特性:

編碼一致性:PDO提供可用于各種數據庫的單一接口

靈活性:PDO在運行時必須加載數據庫驅動程序,所以不需要每次在使用數據庫時,重新配置和重新編譯PHP

高性能:PDO是用C語言編寫的編譯為PHP,與用php編寫的其他方案相比,雖然其他功能相同,但提供了更高的性能

面向對象特性:PDO是利用的PHP5面向對象的特性,可以獲得更高效的數據庫通信。

注意:PDO擴展只是一個抽象的接口層,利用PDO擴展本身,并不能實現任何數據庫的操作,必須使用一個特性的形式把各自的特色表現出來才行。

PHP中PDO連接數據庫的操作步驟

1-2 PDO的配置與啟用

1-3 PDO連接數據庫

PHP中PDO連接數據庫的操作步驟

1.通過參數形式連接數據庫(重點掌握此種辦法)

//通過參數形式連接數據庫
try{
 $dsn='mysql:host=localhost;dbname=school';
 $username='root';
 $password='root';
 $pdo=new PDO($dsn,$username,$password);
 var_dump($pdo);
}catch (PDOException $e){
    echo $e->getMessage();
};

需要注意:dsn是你的數據源

輸出結果:object(PDO)#1 (0) { }

二、 PDO對象的使用

主要介紹PDO對象方法的使用。

2-1 [PDO] exec()方法執行建表操作   PHP中PDO連接數據庫的操作步驟

PHP中PDO連接數據庫的操作步驟

<?php
try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //exec():執行一條sql語句并返回其受影響的行數;如果沒有受影響的記錄,它返回0
    //exec對于select沒有作用
    //PHP是一個Web編程語言,在編程過程中難免會遇到用echo來輸出大段的html和javascript腳本的情況,
    //如果用傳統的輸出方法 ——按字符串輸出的話,
    //肯定要有大量的轉義符來對字符串中的引號等特殊字符進行轉義,以免出現語法錯誤。
    //如果是一兩處還可以容忍,但是要是一個完整的 html文本或者是一個200行的js我想是誰都會崩潰的。
    //這就是PHP為什么要引入一個定界符的原因——至少一大部分原因是這樣的。

    /*    1.PHP定界符的作用就是按照原樣,包括換行格式什么的,輸出在其內部的東西;
    2.在PHP定界符中的任何特殊字符都不需要轉義;
    3.PHP定界符中的PHP變量會被正常的用其值來替換。
        PHP中的定界符格式是這樣的:
    <<<Eof
    ……
    Eof;*/
    $sql=<<<EOF
    create table if not exists t_teacher(
   id int UNSIGNED auto_increment primary key,
   teaname varchar(20) not null UNIQUE,
   pwd char(32) not null,
   email varchar(30) not null
);
EOF;
   $res= $pdo->exec($sql);
    var_dump($res);
}catch (PDOException $e){
    echo $e->getMessage();
};

輸出結果:int(0);

2-2 [PDO] exec()方法執行插入記錄操作

續上面:插入一條或多條記錄

<?php
try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    $sql='insert into t_teacher values(default,"king5","'.md5('king').'","waly@qq.com");';
    $res=$pdo->exec($sql);
    echo $res;
}catch (PDOException $e){
    echo $e->getMessage();
};
<?php
try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //$sql='insert into t_teacher values(default,"king6","'.md5('king').'","waly@qq.com");';
   $sql=<<<EOF
      insert into t_teacher values
      (default,"king7","'.md5('king').'","waly@qq.com"),
      (default,"king8","'.md5('king').'","waly@qq.com"),
      (default,"king9","'.md5('king').'","waly@qq.com")
EOF;

    $res=$pdo->exec($sql);
    echo '受影響的記錄的條數為:'. $res."<br/>";
    //$pdo->lastInsertId():得到新插入記錄的ID號
    //echo '最后插入的ID號為:'.$pdo->lastInsertId();
}catch (PDOException $e){
    echo $e->getMessage();
};

2-3 [PDO] exec()方法執行其他SQL操作

PHP中PDO連接數據庫的操作步驟

本身是king,修改為king,會是0條記錄被影響.

lastInsertId() 只能對插入有影響。

exec()對查詢無作用

2-4 [PDO] errorCode()和errorInfo()方法查看錯誤信息

<?php
try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
   //錯誤的表名
    $sql='insert into t_teacher1 values(default,"king6","'.md5('king').'","waly@qq.com");';
    $res=$pdo->exec($sql);
    if($res===false){
        //$pdo->errorCode(); SQLSTATE的值
        echo $pdo->errorCode();
        echo '<hr/>';
      //$pdo->errorInfo():返回的錯誤信息的數組,數組中包含3個單元
     //0=>SQLSTATE(錯誤編號),1=>CODE(錯誤碼),2=>INFO(錯誤信息)
        $errInfo=$pdo->errorInfo();
        print_r($errInfo);
    }
}catch (PDOException $e){
    echo $e->getMessage();
};

2-5 [PDO] query()方法執行查詢語句

<?php
try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //查詢一條記錄
    //$sql='select * from t_teacher where id=5';
    //查詢多條記錄
    $sql='select * from t_teacher';
    //$pdo->query($sql):執行sql語句,返回PDOStatement對象:需要遍歷這個對象,將里面的內容取出來
    $stmt=$pdo->query($sql);
    var_dump($stmt); //只能看出這個語句返回的是一個對象
    echo '<hr/>';
    foreach ($stmt as $row){
        print_r($row);
        echo '<hr/>';
        echo '編號:'.$row['id'].'<br/>';
        echo '用戶名:'.$row['teaname'].'<br/>';
        echo '郵箱:'.$row['email'].'<br/>';
        echo '<hr/>';
    }
}catch (PDOException $e){
    echo $e->getMessage();
};
Query()用于插入數據

<?php
try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //插入一條記錄
    $sql='insert into t_teacher values(default,"king12","'.md5('king').'","waly@qq.com");';
    //$pdo->query($sql):執行sql語句,返回PDOStatement對象:需要遍歷這個對象,將里面的內容取出來
    $stmt=$pdo->query($sql);
    var_dump($stmt); //只能看出這個語句返回的是一個對象
}catch (PDOException $e){
    echo $e->getMessage();
};

注意:更多的用query()查詢數據,用exec()實現增刪改

2-6 [PDO] prepare()和execute()方法執行查詢語句

PHP中PDO連接數據庫的操作步驟

<?php

//查詢單條語句

try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //查詢一條記錄
   $sql='select * from t_teacher where id=5';
   //$pdo->prepare($sql);準備sql語句
    $stmt=$pdo->prepare($sql);
    //execute():執行預處理語句
    $res=$stmt->execute();
    //var_dump($res); //會返回bool(true)
    //查數據使用
    //fetch():得到結果集中的一條記錄(作為索引+關聯樣式返回)
    $row=$stmt->fetch();
    print_r($row);
}catch (PDOException $e){
    echo $e->getMessage();
};
<?php
try{
    //驅動器的名稱 mysql
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //查詢多條記錄
    $sql='select * from t_teacher';
    //$pdo->prepare($sql);準備sql語句
    $stmt=$pdo->prepare($sql);
    //execute():執行預處理語句
    $res=$stmt->execute();
    //var_dump($res); //會返回bool(true)
    //查數據使用
    //fetch():得到結果集中的一條記錄(作為索引+關聯數組)
    /*if($res){
        while ($row=$stmt->fetch()){
            print_r($row);
            echo '<hr/>';
        }
    }*/
    //fetchAll() 查詢所有記錄,以二維數組(索引+關聯方式)
 $rows=$stmt->fetchAll();
print_r($rows);
}catch (PDOException $e){
    echo $e->getMessage();
};

指定類型:我們更多的是想得到關聯數組,我們可以通過兩種方式來獲得,第一種方式:設置其取回數據的方式(設置參數、常量);第二種方式:通過方法

三、 PDOStatement對象的使用

本章主要介紹PDOStatement對象方法的使用,以及參數的綁定與預處識。

PHP中PDO連接數據庫的操作步驟

3-1 [PDO] quote()方法防止SQL注入

帶條件查詢 登錄實現的例子

<?php
header('content-type:text/html;charset=utf-8');
$username=$_POST['username'];
$password=$_POST['password'];
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //向數據庫表查找對應的用戶信息//如果存在,證明有這個用戶,登錄成功;否則登錄失敗
    //輸入 'or 1=1 # 可以查看查到的數據
    //$sql="select * from t_user WHERE `name`='{$username}' AND  `password`='{$password}'";    //通過quote():返回帶引號的字符串,過濾字符串中的特殊字符
    $username=$pdo->quote($username);
    $sql="select * from t_user WHERE `name`={$username} AND  `password`={$password}";
    echo $sql;
    $stmt=$pdo->query($sql);
    //PDOStatement對象的方法:rowCount() :對于select操作返回的結果集中記錄的條數,
    //對于INSERT、UPDATE、DELETE返回受影響的記錄的條數
    echo $stmt->rowCount();
}catch (PDOException $e){
    echo $e->getMessage();
}

3-2 [PDO] 預處理語句中的占位符的使用

<?php
header('content-type:text/html;charset=utf-8');
$username=$_POST['username'];
$password=$_POST['password'];
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    //占位符有兩種方法
    //第一種方法
    $sql="select * from t_user WHERE `name`=:username and  `password`=:password";
    $stmt=$pdo->prepare($sql);
$stmt->execute(array(":username"=>$username,":password"=>$password));
    //PDOStatement對象的方法:rowCount() :對于select操作返回的結果集中記錄的條數,
    //對于INSERT、UPDATE、DELETE返回受影響的記錄的條數
   echo $stmt->rowCount();
    //第二種方法
    $sql="select * from t_user WHERE `name`=? and  `password`=?";
    $stmt=$pdo->prepare($sql);
    $stmt->execute(array($username,$password));
    echo $stmt->rowCount();
}catch (PDOException $e){
    echo $e->getMessage();
}

3-3 [PDO] bindParam()方法綁定參數

兩種方式:命名參數占位符,問號方式

<?php
header('content-type:text/html;charset=utf-8');
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
   // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)";
    $sql="insert into t_user VALUES (DEFAULT ,:username,:password,:sex)";
    $stmt=$pdo->prepare($sql);
    $stmt->bindParam(":username",$username,PDO::PARAM_STR);
    $stmt->bindParam(":password",$password,PDO::PARAM_STR);
    $stmt->bindParam(":sex",$sex,PDO::PARAM_STR);
    $username='張三';
    $password='123654';
    $sex='M';
   $stmt->execute();
   echo $stmt->rowCount();
}catch (PDOException $e){
    echo $e->getMessage();
}
<?php
header('content-type:text/html;charset=utf-8');
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)";
    $sql="insert into t_user VALUES (DEFAULT ,?,?,?)";
    $stmt=$pdo->prepare($sql);
    $stmt->bindParam(1,$username);
    $stmt->bindParam(2,$password);
    $stmt->bindParam(3,$sex);
    $username='張三1';
    $password='1236541';
    $sex='F';
    $stmt->execute();
    echo $stmt->rowCount();
}catch (PDOException $e){
    echo $e->getMessage();
}

3-4 [PDO] bindValue()方法綁定參數

向用戶表插入數據:命名參數占位符,問號方式類似

<?php
header('content-type:text/html;charset=utf-8');
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)";
    $sql="insert into t_user VALUES (DEFAULT ,?,?,?)";
    $stmt=$pdo->prepare($sql);
    $username='李四';
    $password='123654';
    $stmt->bindValue(1,$username);
    $stmt->bindValue(2,$password);
    $stmt->bindValue(3,'M');
    $stmt->execute();
    echo $stmt->rowCount();
    $username='李四1';
    $password='1236541';
    $stmt->bindValue(1,$username);
    $stmt->bindValue(2,$password);
    $stmt->bindValue(3,'M');
    $stmt->execute();
    echo $stmt->rowCount();
}catch (PDOException $e){
    echo $e->getMessage();
}

3-5 [PDO] bindColumn()方法綁定參數

PHP中PDO連接數據庫的操作步驟

<?php
header('content-type:text/html;charset=utf-8');
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)";
    $sql="select `name`,`password`,`sex` from t_user";
    $stmt=$pdo->prepare($sql);
    $stmt->execute();

  echo '結果集中的列數一共有:'.$stmt->columnCount();

    echo "<hr/>";

    print_r($stmt->getColumnMeta(0));
    $stmt->bindColumn(1,$username);
    $stmt->bindColumn(2,$password);
    $stmt->bindColumn(3,$sex);
    while ($stmt->fetch(PDO::FETCH_BOUND)){
      echo '用戶名:'.$username."-密碼:".$password."-性別:".$sex."<hr/>";
    }
    echo $stmt->rowCount();
}catch (PDOException $e){
    echo $e->getMessage();
}

3-6 [PDO] fetchColumn()方法從結果集中返回一列

<?php
header('content-type:text/html;charset=utf-8');
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');    $sql="select `name`,`password`,`sex` from t_user";
    $stmt=$pdo->query($sql);
    //索引默認從0開始
    echo $stmt->fetchColumn(0),"<br/>";
    echo $stmt->fetchColumn(1),"<br/>";
    echo $stmt->fetchColumn(2);
}catch (PDOException $e){
    echo $e->getMessage();
}

3-7 [PDO] debugDumpParams()方法打印一條預處理語句

<?php
header('content-type:text/html;charset=utf-8');
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    // $sql="insert into t_user(`name`,`password`,`sex`) VALUES (:username,:password,:sex)";
    $sql="insert into t_user VALUES (DEFAULT ,:username,:password,:sex)";
    $stmt=$pdo->prepare($sql);
    $stmt->bindParam(":username",$username,PDO::PARAM_STR);
    $stmt->bindParam(":password",$password,PDO::PARAM_STR);
    $stmt->bindParam(":sex",$sex,PDO::PARAM_STR);
    $username='張三';
    $password='123654';
    $sex='M';
    $stmt->execute();
    $stmt->debugDumpParams();
}catch (PDOException $e){
    echo $e->getMessage();
}

四、PDO事務處理

主要介紹如何使用PDO進行事務處理

4-1 PDO錯誤處理模式

3種錯誤處理模式

靜默模式

<?php
header('content-type:text/html;charset=utf-8');
 /*PDO::ERRMODE_SLIENT:默認模式,靜默模式*/
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
    $sql="select * from nonet_user";
    $stmt=$pdo->query($sql);
    echo $pdo->errorCode();
    echo '<br/>';
    echo $pdo->errorInfo();
}catch (PDOException $e){
    echo $e->getMessage();
}
<?php
header('content-type:text/html;charset=utf-8');
 /*PDO::ERRMODE_SLIENT:默認模式,靜默模式
 *PDO::ERRMODE_WARNING:警告模式
  * PDO::ERRMODE_EXCEPTION:異常模式
 */
try{
    //連接數據庫
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root');
   //設置警告模式
    //$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
    //設置異常模式:推薦使用
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $sql="select * from nonet_user";
    $stmt=$pdo->query($sql);
    echo $pdo->errorCode();
    echo '<br/>';
    echo $pdo->errorInfo();
}catch (PDOException $e){
    echo $e->getMessage();
}

4-2 PDO事務處理

<?php
header('content-type:text/html;charset=utf-8');
try{
    $option=array(PDO::ATTR_AUTOCOMMIT,0);
    $pdo=new PDO('mysql:host=localhost;dbname=school','root','root',$option);
//開啟事務
    $pdo->beginTransaction();
    var_dump($pdo->inTransaction());
    $sql="update account set money=money-200  WHERE username='king'";
    $res=$pdo->exec($sql);
    if($res==0){
        throw new PDOException('轉賬失敗');
    }
    $res1=$pdo->exec('update account set money=money+200  WHERE username="queen"');
    if($res1==0){
        throw new PDOException('接收失敗');
    }
    $pdo->commit();
}catch (PDOException $e){
    $pdo->rollBack();
    echo $e->getMessage();
}

感謝你能夠認真閱讀完這篇文章,希望小編分享PHP中PDO連接數據庫的操作步驟內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岑溪市| 成武县| 封丘县| 塘沽区| 诸暨市| 微博| 荥阳市| 陈巴尔虎旗| 城口县| 霍山县| 湾仔区| 宜春市| 巴青县| 五寨县| 泰顺县| 星座| 天台县| 松江区| 上栗县| 南康市| 萨嘎县| 太仆寺旗| 太仓市| 垣曲县| 长泰县| 扎鲁特旗| 阳谷县| 伊春市| 拜泉县| 屏东市| 西吉县| 上林县| 松原市| 岳普湖县| 庆城县| 平南县| 奉贤区| 宾阳县| 乌拉特后旗| 麦盖提县| 安阳市|