PHPPDO事務(wù)處理預(yù)處理高洛峰細(xì)說PHP

PDO錯誤處理三種模式

創(chuàng)新互聯(lián)專注于海城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供海城營銷型網(wǎng)站建設(shè),海城網(wǎng)站制作、海城網(wǎng)頁設(shè)計、海城網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造海城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供海城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

/*
 * 數(shù)據(jù)庫抽象層PDO
 * 一個 DSN 由 PDO 驅(qū)動名、緊隨其后的冒號、以及具體 PDO 驅(qū)動的連接語法組成。
 * PDO::ERRMODE_SILENT
 * PDO::ERRMODE_WARNING
 * PDO::ERRMODE_EXCEPTION
 * 
 * PDO中的執(zhí)行SQL語句的方法
 * 1.exec() 用來處理非結(jié)果集的 insert update delete create 返回影響行
 * 2.query() 用來處理有結(jié)果集的 select desc show
 * 
 * 兩種都可以
 * $pdo->exec('set names utf8');
 * $pdo->query('set names utf8');
 * 
 */

        //MySQL_connect('localhost','root','root');
       // mysql_select_db('test');
       $dsn           =     'mysql:dbname=test;host=localhost';
       $username =    'root';
       $passwd     =    'root';
       $options     =    array(
           PDO::ATTR_AUTOCOMMIT=>true,
           PDO::ATTR_PERSISTENT=>true
       );
       try{
                $pdo =  new PDO($dsn, $username, $passwd, $options);
       }catch(PDOException $e){
                echo "數(shù)據(jù)庫連接失敗:".$e->getMessage();
                exit;
       }
        echo '創(chuàng)建PDO對象成功!';
        echo $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_SERVER_VERSION).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_CASE).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS ).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_DRIVER_NAME).'<br/>';
        echo $pdo->getAttribute(PDO::ATTR_PERSISTENT).'<br/>';
        /*
        $query = "delete from helloworld";
        $affected_rows =    $pdo->exec($query);
        
        //PDO的錯誤處理模式(默認(rèn)不提示,我們可能看不到問題)PDO::ERRMODE_SILENT
        if(!$affected_rows){
            echo $pdo->errorCode();
            echo '<br/>';
            echo '<pre>';
            print_r($pdo->errorInfo());
            echo '</pre>';            
        }
        
        //警告模式
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        echo  $pdo->getAttribute(PDO::ATTR_ERRMODE);
        */
        //異常模式
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        try{
            //使用PDO中的方法執(zhí)行語句
            //插入
            $query = "insert into users(username,password,email) values('xiaowang','123','xiaoming@163.com')";
            $affected_rows =    $pdo->exec($query);
             echo $pdo->lastInsertId();
           //查詢
            $query  =   "select * from users";
            $result = $pdo->query($query);
            var_dump($result);
        }catch (PDOException $e){
            echo '錯誤的原因:'.$e->getMessage();
        }

PDO事務(wù)處理

/*
 * PDO事務(wù)處理
 */
$dsn           =     'mysql:dbname=test;host=localhost';
$username =    'root';
$passwd     =    'root';
$options     =    array(
    PDO::ATTR_AUTOCOMMIT=>true,
    PDO::ATTR_PERSISTENT=>true
);
try{
    //創(chuàng)建對象
    $pdo =  new PDO($dsn, $username, $passwd, $options);
    //設(shè)置錯誤使用異常模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //關(guān)閉自動提交(使用事務(wù)第一步)
    $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
}catch(PDOException $e){
    echo "數(shù)據(jù)庫連接失敗:".$e->getMessage();
    exit;
}

try{
    //開啟一個事務(wù)
    $pdo->beginTransaction();
    $price = 50;
    $statement = "update demo set salary=salary-{$price} where id=1";
    $a=$pdo->exec($statement);
    if($a>0){
        echo '轉(zhuǎn)出成功!';
    }else{
        throw new PDOException('轉(zhuǎn)出失??!');
    }
    $statement = "update demo set salary=salary+{$price} where id=3";
    $b=$pdo->exec($statement);
    if($b>0){
        echo '轉(zhuǎn)入成功!';
    }else{
        throw new PDOException('轉(zhuǎn)入失??!');
    }
    echo '交易成功!<br/>';
    //提交以上的操作
    $pdo->commit();
}catch (PDOException $e){
    echo '錯誤的原因:'.$e->getMessage();
    echo '交易失敗!<br/>';
    //撤銷所有的操作
    $pdo->rollBack();
}

//運行完成后開啟自動提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, true);

PDO對預(yù)處理語句

/*
 * PDO對預(yù)處理語句
 * 1.效率問題 編譯次數(shù)
 * 2.安全性問題  防止SQL注入     1 or 1='1' 
 * $query = "delete from demo where id='{$_GET['id']}' ";
 * 
 * 
 */
 
$dsn           =     'mysql:dbname=test;host=localhost';
$username =    'root';
$passwd     =    'root';
$options     =    array(
    PDO::ATTR_AUTOCOMMIT=>true,
    PDO::ATTR_PERSISTENT=>true
);
try{
    //創(chuàng)建對象
    $pdo =  new PDO($dsn, $username, $passwd, $options);
    //設(shè)置錯誤使用異常模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
    echo "數(shù)據(jù)庫連接失敗:".$e->getMessage();
    exit;
}

try{
        $statement = "insert into users(username,password,email) values(?,?,?)";// ?表示占位
        //直接給數(shù)據(jù)庫管理系統(tǒng)并執(zhí)行
        //$pdo->query($statement);
        //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行
        $pdostatement=$pdo->prepare($statement);
        //綁定參數(shù)(?) 將問號和一個變量關(guān)聯(lián)起來  對于使用問號占位符的預(yù)處理語句,應(yīng)是以1開始索引的參數(shù)位置。         
        $pdostatement->bindParam(1, $username);
        $pdostatement->bindParam(2, $password);
        $pdostatement->bindParam(3, $email);
        //給變量賦值
        $username = 'lisiming1';
        $password = '1234';
        $email = 'lisiming@163.com';
        //PDOStatement::execute — 執(zhí)行一條預(yù)處理語句         
        $pdostatement->execute();
        
        $username = 'lisiming2';
        $password = '1234';
        $email = 'lisiming@163.com';
        $pdostatement->execute();
        
}catch (PDOException $e){
    echo '錯誤的原因:'.$e->getMessage();

}
=======================================================================================
/*
 * PDO對預(yù)處理語句
 * 1.效率問題 編譯次數(shù)
 * 2.安全性問題  防止SQL注入     1 or 1='1' 
 * $query = "delete from demo where id='{$_GET['id']}' ";
 * 
 * 
 */
 
$dsn           =     'mysql:dbname=test;host=localhost';
$username =    'root';
$passwd     =    'root';
$options     =    array(
    PDO::ATTR_AUTOCOMMIT=>true,
    PDO::ATTR_PERSISTENT=>true
);
try{
    //創(chuàng)建對象
    $pdo =  new PDO($dsn, $username, $passwd, $options);
    //設(shè)置錯誤使用異常模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
    echo "數(shù)據(jù)庫連接失敗:".$e->getMessage();
    exit;
}

try{
        $statement = "insert into users(username,password,email) values(:username,:password,:email)";// :name 形式的參數(shù)名
        //直接給數(shù)據(jù)庫管理系統(tǒng)并執(zhí)行
        //$pdo->query($statement);
        //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行
        $pdostatement=$pdo->prepare($statement);
        //綁定參數(shù)(?) 將問號和一個變量關(guān)聯(lián)起來  對于使用問號占位符的預(yù)處理語句,應(yīng)是以1開始索引的參數(shù)位置。         
        $pdostatement->bindParam(':username', $username,PDO::PARAM_STR);
        $pdostatement->bindParam(':password', $password,PDO::PARAM_STR);
        $pdostatement->bindParam(':email', $email,PDO::PARAM_STR);
        //給變量賦值
        $username = 'lisiming3';
        $password = '1234';
        $email = 'lisiming@163.com';
        //PDOStatement::execute — 執(zhí)行一條預(yù)處理語句         
        $pdostatement->execute();
        
        $username = 'lisiming4';
        $password = '1234';
        $email = 'lisiming@163.com';
        $pdostatement->execute();
        
}catch (PDOException $e){
    echo '錯誤的原因:'.$e->getMessage();

}
=======================================================================================
        $statement = "insert into users(username,password,email) values(?,?,?)";
        //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行
        $pdostatement=$pdo->prepare($statement);
        $pdostatement->execute(array('xiaoli','123','xiaoli@163.com'));
=======================================================================================
        $statement = "insert into users(username,password,email) values(:username,:password,:email)";
        //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行
        $pdostatement=$pdo->prepare($statement);
        $pdostatement->execute(array('username'=>'xiaoli1','password'=>'1123aa','email'=>'xiaoli1@163.com'));
=======================================================================================
/*
 * PDO對預(yù)處理語句
 * 1.效率問題 編譯次數(shù)
 * 2.安全性問題  防止SQL注入     1 or 1='1' 
 * $query = "delete from demo where id='{$_GET['id']}' ";
 * fetch()
 * fetchAll()
 * setFetchMode()
 * 
 */
 
$dsn           =     'mysql:dbname=test;host=localhost';
$username =    'root';
$passwd     =    'root';
$options     =    array(
    PDO::ATTR_AUTOCOMMIT=>true,
    PDO::ATTR_PERSISTENT=>true
);
try{
    //創(chuàng)建對象
    $pdo =  new PDO($dsn, $username, $passwd, $options);
    //設(shè)置錯誤使用異常模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
    echo "數(shù)據(jù)庫連接失敗:".$e->getMessage();
    exit;
}

try{
        $statement = "select * from users where id > ? and id < ?";
        //給數(shù)據(jù)庫管理系統(tǒng),編譯后等待 沒有執(zhí)行
        $pdostatement=$pdo->prepare($statement);
        $pdostatement->execute(array(3,6));
        //設(shè)置結(jié)果的模式
        $pdostatement->setFetchMode(PDO::FETCH_NUM);        
        echo '<table border="1" width="800" align="center">';
        while(list($id,$username,$password,$email) = $pdostatement->fetch()){
           echo '<tr>';
           echo '<td>'.$id.'</td>';
           echo '<td>'.$username.'</td>';
           echo '<td>'.$password.'</td>';
           echo '<td>'.$email.'</td>';
           echo '</tr>';
           
        }
        echo '</table>';
        
}catch (PDOException $e){
    echo '錯誤的原因:'.$e->getMessage();
}
=======================================================================================
        //綁定欄目
        $pdostatement->bindColumn(1, $id);
        $pdostatement->bindColumn(2, $username);
        $pdostatement->bindColumn(3, $password);
        $pdostatement->bindColumn(4, $email);
=======================================================================================
        //綁定欄目
        $pdostatement->bindColumn('id', $id);
        $pdostatement->bindColumn('username', $username);
        $pdostatement->bindColumn('password', $password);
        $pdostatement->bindColumn('email', $email);

分享文章:PHPPDO事務(wù)處理預(yù)處理高洛峰細(xì)說PHP
轉(zhuǎn)載注明:http://muchs.cn/article42/jopiec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站建設(shè)、用戶體驗、品牌網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化