php---PDO使用及總結

再使用php進行原生框架搭建的過程當中,發現即便sql語句錯誤,php的pdo是不會報錯的,很是奇怪php

而後研究了下,發現原來pdo默認是不報錯的,想要報錯就要知足兩個條件:mysql

一、須要將錯誤處理模式變成異常模式sql

  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);數據庫

二、全部可能出錯的語句都必須進行捕捉數組

  try{服務器

    //code框架

  }catch(PDOExecption $e){fetch

    //錯誤信息處理spa

  }code

 

總結:

pdo使用:

$pdo=new PDO("mysql:host=localhost;dbname=kong","root","");                        
$pdo->query();//執行的是select語句,返回值是PDOStatement對象。   
$pdo->fetchAll(PDO::FETCH_ASSOC);//經過一次調用返回所有結果,並以數組方式保存 $pdo->exec();//執行的是返回值爲intl的sql語句:增長,修改,刪除 
$pdo->exective();//執行的是預處理語句 /*設置字符集 */
$pdo->query("set names utf8");

 

另外,在使用pdo返回數據的時候,若是不設置,返回的數據會出現問題。如明明是int類型,返回的確實string

解決:

$options = [
                PDO::ATTR_EMULATE_PREPARES => false,
                PDO::ATTR_STRINGIFY_FETCHES => false
            ];
            static::$pdo = new PDO("mysql:host=$host;dbname=$database", $username, $password, $options);

  PDO::ATTR_STRINGIFY_FETCHES: 提取的時候將數值轉換爲字符串。 須要 bool 類型。
  PDO::ATTR_EMULATE_PREPARES 啓用或禁用預處理語句的模擬。 有些驅動不支持或有限度地支持本地預處理。使用此設置強制PDO老是模擬預處理語句(若是爲 TRUE ),或試着使用本地預處理語句(若是爲 FALSE)。若是驅動不能成功預處理當前查詢,它將老是回到模擬預處理語句上。 須要 bool 類型。

注意:修改完,若發現還不起做用,是由於你用的是老的驅動php5-mysql,你應該換成php5-mysqlnd。

經常使用屬性及使用方式:

設置PDO在處理數據過程當中的處理方式:

  PDO::setAttribute:設置屬性

  PDO::getAttribute:獲取屬性

PDO::ATTR_CASE:當pdo從結果集中獲取數據的時候,如何處理對應的字段的名字

  PDO::CASE_LOWER:將全部字段都小寫顯示

  PDO::CASE_UPPER:全部字段都大寫顯示

  PDO::CASE_NATURAL:本來怎麼樣就怎麼樣

    $pdo->setAttribute(PDO::ATTR_CASE,PDO::CASE_NATURAL);
    //或 $pdo->setAttribute(PDO::ATTR_CASE,1);
    var_dump(PDO::CASE_UPPER);      //1 轉換爲大寫
    var_dump(PDO::CASE_LOWER);      //2 轉換爲小寫
    var_dump(PDO::CASE_NATURAL);    //0 是怎樣就是怎樣
    $sql = "select * from user ";
    $stmt = $pdo->query($sql);
    var_dump($stmt->fetch(PDO::FETCH_ASSOC));

PDO::ATTR_AUTOCOMMIT:設置當前鏈接Mysql服務器的客戶端的SQL語句是否自動執行,默認是自動提交

//自動提交屬性
var_dump($pdo->getAttribute(PDO::ATTR_AUTOCOMMIT));    //1
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
var_dump($pdo->getAttribute(PDO::ATTR_AUTOCOMMIT));  //0

PDO::ATTR_ERRMODE:錯誤模式,當pdo出現錯誤的時候到底使用哪一種模式進行處理,會內部本身拋出異常,終斷頁面

   PDO::ERRMODE_SILENT:靜默模式,默認的出錯了無論

   PDO::ERRMODE_WARNING:警告模式,若是出錯了就會報出警告

   PDO::ERRMODE_EXCEPTION:異常模式,若是出錯會採用異常來處理(PDOException)

var_dump($pdo->getAttribute(PDO::ATTR_ERRMODE));
var_dump(PDO::ERRMODE_SILENT);        //0 靜默模式,默認的出錯了無論
var_dump(PDO::ERRMODE_WARNING);        //1 警告模式,若是出錯了就會報出警告
var_dump(PDO::ERRMODE_EXCEPTION);    //2 異常模式,若是出錯會採用異常來處理(PDOException)

PDO::ATTR_PERSISTENT:當前對Mysql服務器的鏈接是不是長鏈接

TRUE:是長鏈接(長鏈接的使用必需要配合:Apache(connection:keepAlive),Mysqld)

FALSE:默認的,非長鏈接

什麼狀況下使用長鏈接?

  1. 不一樣的腳本的執行間距很是短,同時每一個腳本都要操做數據庫(Mysql:mysql_pconnect()
相關文章
相關標籤/搜索