摘要:二對象利用的構(gòu)造函數(shù)連接特定的數(shù)據(jù)庫,創(chuàng)建一個對象。連接數(shù)據(jù)庫連接數(shù)據(jù)庫有三種方式通過參數(shù)形式連接推薦構(gòu)造函數(shù)還有一個參數(shù),它是一個數(shù)組,用于配置運行中的數(shù)據(jù)庫,如是否開啟自動提交設(shè)置結(jié)果集的返回方式等。
一、PDO簡介
PDO是PHP Data Object的簡稱,用于定義數(shù)據(jù)庫訪問的抽象層,統(tǒng)一各種數(shù)據(jù)庫的訪問接口。PDO有如下特性:
編碼一致性:PDO支持多種數(shù)據(jù)庫擴展,并為其提供統(tǒng)一的訪問接口 靈活性:PDO提供了統(tǒng)一的SQL操作方法和屬性 高效性:PDO是用C編寫、PHP編譯的 面向?qū)ο螅篜DO完全采納面向?qū)ο蟮乃枷?
PDO支持的數(shù)據(jù)庫:
但是,需要注意的是,PDO只是提供了一組數(shù)據(jù)庫訪問接口,利用PDO本身不能操作任何數(shù)據(jù)庫。
二、PDO對象利用PDO的構(gòu)造函數(shù)連接特定的數(shù)據(jù)庫,創(chuàng)建一個PDO對象。在利用PDO之前,需要開啟PDO擴展。以PHP+MySQL為例,
開啟PHP對PDO的擴展:在php.ini中去掉extension=php_pdo.dll的注釋。
開啟MySQL對PDO的擴展:在my.ini中去掉extension=php_pdo_mysql.dll的注釋。
利用phpinfo()可以查看是否開啟PDO擴展。
1、連接數(shù)據(jù)庫PDO連接數(shù)據(jù)庫有三種方式:
1.1 通過參數(shù)形式連接(推薦)$dsn = "mysql:host=localhost;dbname=xxx"; $username = "xxxxx"; $pwd = "xxxx"; $pdo = new PDO($dsn,$username,$pwd);
PDO構(gòu)造函數(shù)還有一個$options參數(shù),它是一個數(shù)組,用于配置運行中的數(shù)據(jù)庫,如是否開啟自動提交、設(shè)置結(jié)果集的返回方式等。
1.2 通過uri連接首先建立一個文件,保存數(shù)據(jù)源,文件內(nèi)容形如:mysql:host=localhost;dbname=xxx。然后在程序中引入該文件。
$dsn = "uri:file://保存數(shù)據(jù)源配置的文件路徑"; $username = "xxxxx"; $pwd = "xxxx"; $pdo = new PDO($dsn,$username,$pwd);1.3 通過配置文件連接
在php.ini中的任意一個位置添加數(shù)據(jù)源的配置:
pdo.dsn.test=”mysql:host=localhost;dbname=xxxx”;
test是自定義的數(shù)據(jù)源名稱。為方便,可以在php.ini的首行中添加,然后重啟服務(wù)器,在程序中引入該數(shù)據(jù)源
$dsn = "test"; //數(shù)據(jù)源名稱 $username = "xxxxx"; $pwd = "xxxx"; $pdo = new PDO($dsn,$username,$pwd);2、PDO對象的常見方法和屬性
方法或?qū)傩? 描述
exec() 執(zhí)行一條SQL語句,返回受影響的行數(shù)。用于增刪改,對查詢返回0
query() 執(zhí)行一條SQL語句,返回PDOStatement對象,用于保存結(jié)果集
prepare() 執(zhí)行一條SQL語句,返回PDOStatement對象
quote() 返回一個添加引號的字符串,用于SQL語句,可防止SQL注入
lastInsertId 返回最后插入的ID
setAttribute() 設(shè)置數(shù)據(jù)庫連接屬性
getAttribute() 獲取數(shù)據(jù)庫連接屬性
errorCode() 獲取跟數(shù)據(jù)庫句柄上一次操作相關(guān)的SQLSTATE
errorInfo() 獲取跟數(shù)據(jù)庫句柄上一次操作相關(guān)的錯誤信息
beginTransaction() 開啟一個事務(wù)。需要先關(guān)閉自動提交
commit() 提交事務(wù)
rollBack() 回滾事務(wù)
inTransaction() 檢查操作是否在事務(wù)內(nèi)
PDO對象的query()和prepare()方法均會返回一個PDOStatement對象,該對象可以用于PDO的預(yù)處理執(zhí)行。其常見方法如下:
方法 描述
execute() 執(zhí)行一條預(yù)處理語句
rowCount() 返回上一個SQL語句影響的行數(shù)
fetch() 從結(jié)果集中獲取一行
fetchAll() 返回一個包含結(jié)果中所有行的數(shù)組
setFetchMode() 設(shè)置默認獲取結(jié)果集的模式
fetchObject() 獲取結(jié)果集下一行并作為對象返回
fetchColumn() 獲取結(jié)果集下一行的多帶帶一列
bindParam() 綁定一個參數(shù)到指定的變量名
bindValue() 將某個值綁定到指定的參數(shù)
bindColumn() 綁定一列到PHP變量
getColumnMeta() 返回結(jié)果集中一列的元素據(jù)
columnCount() 返回結(jié)果中的列數(shù)
setAttribute() 設(shè)置一個語句屬性
getAttribute() 獲取一個語句屬性
errorCode() 獲取跟數(shù)據(jù)庫句柄上一次操作相關(guān)的SQLSTATE
errorInfo() 獲取跟數(shù)據(jù)庫句柄上一次操作相關(guān)的錯誤信息
debugDumpparams() 打印一條SQL預(yù)處理語句
nextRowset() 在一個多行集語句句柄中推進到下一個行集
PDO支持三種異常模式:
默認模式:PDO::ERRMODE_CLIENT 警告模式:PDO::ERRMODE_WARNING 異常模式:PDO::ERRMODE_EXCEPTION(推薦)
可以在PDO的構(gòu)造函數(shù)的第四個$options參數(shù)或用PDO對象的setAttribute()方法設(shè)置。
原文:http://www.ido321.com/1424.html
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30215.html
說明:本篇主要學習數(shù)據(jù)庫連接階段和編譯SQL語句部分相關(guān)源碼。實際上,上篇已經(jīng)聊到Query Builder通過連接工廠類ConnectionFactory構(gòu)造出了MySqlConnection實例(假設(shè)驅(qū)動driver是mysql),在該MySqlConnection中主要有三件利器:IlluminateDatabaseMysqlConnector;IlluminateDatabaseQuery...
摘要:,看下源碼返回很容易知道返回值是,然后將該值存儲在變量中,這時。看下的源碼去除掉字符后為返回從源碼中可知道返回值為,這時。 說明:本文主要學習下Query Builder編譯Fluent Api為SQL的細節(jié)和執(zhí)行SQL的過程。實際上,上一篇聊到了IlluminateDatabaseQueryBuilder這個非常重要的類,這個類含有三個主要的武器:MySqlConnection, M...
摘要:說明本文主要學習模塊的源碼。這里,就已經(jīng)得到了鏈接器實例了,該中還裝著一個,下文在其使用時再聊下其具體連接邏輯。 說明:本文主要學習Laravel Database模塊的Query Builder源碼。實際上,Laravel通過Schema Builder來設(shè)計數(shù)據(jù)庫,通過Query Builder來CURD數(shù)據(jù)庫。Query Builder并不復(fù)雜或神秘,只是在PDO擴展的基礎(chǔ)上又開...
摘要:前置條件編譯的目錄參數(shù)如下上有服務(wù)方便原則,可用來創(chuàng)建測試先安裝啟動拉取鏡像啟動鏡像連接信息創(chuàng)建用戶提供服務(wù)的主機上得裝有的客戶端官網(wǎng)可獲取地址安裝拓展裝裝添加到配置中添加環(huán)境變量重啟顯示 前置條件 php7,編譯的目錄參數(shù)如下 ./configure --prefix=/opt/php7 --with-config-file-scan-dir=/opt/php7/etc/php.d...
閱讀 2737·2021-10-09 09:44
閱讀 3550·2019-08-30 15:54
閱讀 2160·2019-08-30 14:16
閱讀 2790·2019-08-30 13:09
閱讀 825·2019-08-30 13:08
閱讀 1280·2019-08-29 16:29
閱讀 1662·2019-08-26 13:57
閱讀 1925·2019-08-26 13:53