成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP 數(shù)據(jù)庫(kù)操作

Jingbin_ / 474人閱讀

摘要:操作數(shù)據(jù)庫(kù)的種形式使用擴(kuò)展類(lèi)庫(kù)推薦使用擴(kuò)展類(lèi)庫(kù)這是類(lèi)庫(kù)的升級(jí)版,但已經(jīng)不推薦使用擴(kuò)展包含哪三個(gè)類(lèi)與區(qū)別可以支持多種數(shù)據(jù)庫(kù),而且操作方法一致只支持?jǐn)?shù)據(jù)庫(kù)如何使用連接數(shù)據(jù)庫(kù)什么是如何關(guān)閉連接通過(guò)來(lái)連接數(shù)據(jù)庫(kù),其中必須傳入數(shù)據(jù)源名稱(chēng)數(shù)據(jù)源名稱(chēng)是

PHP操作數(shù)據(jù)庫(kù)的2種形式

使用 PDO 擴(kuò)展類(lèi)庫(kù)(推薦)

使用 Mysqli 擴(kuò)展類(lèi)庫(kù)(這是Mysql類(lèi)庫(kù)的升級(jí)版,但已經(jīng)不推薦使用)

PDO 擴(kuò)展包含哪三個(gè)類(lèi)

PDO

PDOStatement

PDOException

PDO 與 Mysqli 區(qū)別

PDO 可以支持多種數(shù)據(jù)庫(kù),而且操作方法一致

Mysqli 只支持Mysql數(shù)據(jù)庫(kù)

如何使用PDO連接數(shù)據(jù)庫(kù)?什么是DSN?如何關(guān)閉連接?

通過(guò)new PDO()來(lái)連接數(shù)據(jù)庫(kù),其中必須傳入DSN數(shù)據(jù)源名稱(chēng)

try {
    $db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

DSN(數(shù)據(jù)源名稱(chēng))是告訴PDO使用哪款驅(qū)動(dòng)來(lái)連接數(shù)據(jù)庫(kù),每一種數(shù)據(jù)庫(kù)DSN都不同

Mysql的DSN mysql:host=localhost;dbname=test
oracle的DSN oci:dbname=//localhost:232/mydb;charset=utf-8

關(guān)閉連接: $db = null;

PDO 與連接相關(guān)的選項(xiàng)如何設(shè)置?

設(shè)置連接選項(xiàng)的2種方式

1、new PDO()的第四參數(shù)

//設(shè)置持久數(shù)據(jù)庫(kù)連接必須使用這種方式,否則無(wú)效
$opt = array(
    PDO::ATTR_PERSISTENT => true,
    PDO::ATTR_TIMEOUT => 3600,
    PDO::ATTR_AUTOCOMMIT => true
);
try {
    $db = new PDO($dsn,$user,$password,$opt);
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

2、使用PDO對(duì)象的setAttribute()方法

try {
    $db = new PDO($dsn,$user,$password);
    $db -> setAttribute(PDO::ATTR_TIMEOUT, 3600);
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
//與getAttribute()方法配套
PDO 錯(cuò)誤處理模式該如何設(shè)置?

錯(cuò)誤處理模式有哪三種?

1、PDO::ERRMODE_SILENT (默認(rèn),不提示,需要結(jié)合errorCode()與errorInfo())
2、PDO::ERRMODE_WARNING (警告)
3、PDO::ERRMODE_EXCEPTION (報(bào)異常,推薦使用)

一般使用案例

try {
    $db = new PDO($dsn,$user,$password);
    $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
PDO 執(zhí)行SQL有哪些方法?

exec() ----不推薦,后面會(huì)有解釋

exec() 主要:執(zhí)行無(wú)結(jié)果集的SQL語(yǔ)句 增刪改創(chuàng)建 返回影響行數(shù)

query() ----不推薦,后面會(huì)有解釋

query() 主要:執(zhí)行有結(jié)果集的SQL語(yǔ)句 查詢 返回PDOStatement對(duì)象

對(duì)于某些SQL 既不是操作,也沒(méi)有返回結(jié)果,使用上面某種方法都可以

prepare() ----推薦,后面會(huì)有解釋

PDO 事務(wù)如何實(shí)現(xiàn)?

操作的Mysql的數(shù)據(jù)表必須是InnoDB

關(guān)閉自動(dòng)提交 $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);

開(kāi)啟事務(wù) $db->beginTransaction();

手動(dòng)提交 $db->commit();

事務(wù)回滾 $db->rollBack();

事務(wù)完成后,最好把自動(dòng)提交開(kāi)啟 $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);

什么是SQL注入?SQL注入如何防止?

SQL注入其實(shí)就是用戶輸入的數(shù)據(jù)帶有攻擊成分,所以用戶輸入的信息都是不可靠的

由于以上原因,導(dǎo)致之前exec()query()方法不常用,因?yàn)椴话踩?,但只要不是用過(guò)用戶數(shù)據(jù)生成的SQL都可以使用exec()query()

使用預(yù)處理語(yǔ)句來(lái)防止SQL注入

try{
    //只是將這個(gè)語(yǔ)句放到數(shù)據(jù)庫(kù)上,編譯后等待,沒(méi)有執(zhí)行
    $stmt = $db -> prepare("insert into user(name,pwd,age) values(?,?,?)");

    //綁定參數(shù)(?)
    $stmt -> bindParam(1,$name);
    $stmt -> bindParam(2,$pwd);
    $stmt -> bindParam(3,$age);

    $name = "wwww";
    $pwd = "12112";
    $age = 18;
    
    //執(zhí)行存儲(chǔ)在數(shù)據(jù)庫(kù)中的語(yǔ)句
    $stmt -> execute();
    
    $name = "bbb";
    $pwd = "ad22121";
    $age = 20;
    
    //執(zhí)行存儲(chǔ)在數(shù)據(jù)庫(kù)中的語(yǔ)句
    $stmt -> execute();
}catch(PDOException $e){
    echo $e->getMessage();
    exit();
}

簡(jiǎn)化模式:

try{
    //只是將這個(gè)語(yǔ)句放到數(shù)據(jù)庫(kù)上,編譯后等待,沒(méi)有執(zhí)行
    $stmt = $db -> prepare("insert into user(name,pwd,age) values(?,?,?)");
    
    //執(zhí)行存儲(chǔ)在數(shù)據(jù)庫(kù)中的語(yǔ)句
    $stmt -> execute(array("wwww","12112",18));
    
}catch(PDOException $e){
    echo $e->getMessage();
    exit();
}
預(yù)處理語(yǔ)句中有哪兩種占位符?注意事項(xiàng)是什么?

2種占位符:命名占位符問(wèn)號(hào)占位符

問(wèn)號(hào)占位符就是上面那種
命名占位符,如下,推薦使用命名控制符

try{
    //只是將這個(gè)語(yǔ)句放到數(shù)據(jù)庫(kù)上,編譯后等待,沒(méi)有執(zhí)行
    $stmt = $db -> prepare("insert into user(name,pwd,age) values(:name,:pwd,:age)");

    //綁定參數(shù)(?)
    $stmt -> bindParam(1,$name);
    $stmt -> bindParam(2,$pwd);
    $stmt -> bindParam(3,$age);

    $name = "wwww";
    $pwd = "12112";
    $age = 18;
    
    //執(zhí)行存儲(chǔ)在數(shù)據(jù)庫(kù)中的語(yǔ)句
    $stmt -> execute();
    
    $name = "bbb";
    $pwd = "ad22121";
    $age = 20;
    
    //執(zhí)行存儲(chǔ)在數(shù)據(jù)庫(kù)中的語(yǔ)句
    $stmt -> execute();
}catch(PDOException $e){
    echo $e->getMessage();
    exit();
}

注意事項(xiàng)

參數(shù)綁定不能應(yīng)用到表名上

//錯(cuò)誤
$sth = $dbh->prepare("SELECT name, colour, calories FROM ?  WHERE calories < ?");

//正確
$sth = $dbh->prepare("SELECT name, colour, calories FROM fruit WHERE calories < ?");

參數(shù)綁定不能應(yīng)用到列名

//錯(cuò)誤
$sth = $dbh->prepare("SELECT name, colour, calories FROM fruit WHERE ? < ?");

//正確
$sth = $dbh->prepare("SELECT name, colour, calories FROM fruit WHERE calories < ?");
PDO 預(yù)處理語(yǔ)句如何增刪改查?

增刪改

try{
    $db = new PDO($dsn,$name,$pwd);
    $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
    echo "Connection failed: " . $e->getMessage();
}

try{
    $stmt = $db -> prepare("insert into user(name,pwd,age) values(?,?,?)");
    $stmt -> execute(array("wtao","23232",14));
    $count = $stmt -> rowCount();
    if($count === 0){
        throw new PDOException();
    }
    
    $id = $db -> lastInsertId();
}catch(PDOException $e){
    echo "Connection failed: " . $e->getMessage();
}

try{
    $db = new PDO($dsn,$name,$pwd);
    $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
    echo "Connection failed: " . $e->getMessage();
}

try{
    $stmt = $db -> prepare("SELECT name, age, title FROM fruit WHERE id < ?");
    $stmt -> execute(array(14));
    while(list($name,$age,$title) = $stmt->fetch(PDO::FETCH_NUM)){
        
    }
}catch(PDOException $e){
    echo "Connection failed: " . $e->getMessage();
}
注意事項(xiàng)

$stmt -> execute()的返回值,如果在異常模式下,可以不用處理返回值的,只有在不是異常處理的模式下才需要判斷處理

$db -> prepare(); 準(zhǔn)備預(yù)處理語(yǔ)句都是多帶帶的,返回PDOStatement對(duì)象也就是多帶帶的,如果某個(gè)功能需要執(zhí)行多條SQL語(yǔ)句,請(qǐng)先準(zhǔn)備好多個(gè)PDOStatement對(duì)象,然后分別執(zhí)行

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25644.html

相關(guān)文章

  • PHP 開(kāi)發(fā)中的外圍資源性能分析(一)

    摘要:而是說(shuō),程序的外部資源,往往是影響性能的重要因素,尤其是當(dāng)外部資源的連接和數(shù)據(jù)獲取本身速度達(dá)不到理想的結(jié)果時(shí)。 暫且不討論「PHP 是不是最好的編程語(yǔ)言」,本文我們將分別分析一下在 PHP 程序的后端外圍資源和前端外圍資源,它們對(duì)整個(gè) PHP Web 應(yīng)用體驗(yàn)的影響,這往往比語(yǔ)言本身大得多。 首先,后端外圍資源,是指跟 PHP 運(yùn)行過(guò)程中與語(yǔ)言本身無(wú)關(guān)的網(wǎng)絡(luò)與 IO 操作、存儲(chǔ)服務(wù)、中...

    anquan 評(píng)論0 收藏0
  • Linux下PHP支持MSSql的配置

    摘要:下面程序員雷雪松就詳細(xì)的看看下如何配置支持下載并安裝,是一套為和允許程序來(lái)跟微軟和數(shù)據(jù)庫(kù)交互的動(dòng)態(tài)庫(kù)。注意的路徑重啟查看已經(jīng)安裝的擴(kuò)展這樣擴(kuò)展就安裝完成了,就可以使用相關(guān)函數(shù)操作數(shù)據(jù)庫(kù)了。原文來(lái)源程序員雷雪松的個(gè)人博客 因?yàn)轫?xiàng)目以前的數(shù)據(jù)庫(kù)為SQLServer(MSSql),客戶希望不要換數(shù)據(jù)庫(kù)。在當(dāng)今客戶就是上帝的理念下,于是只能采用Linux下PHP操作MSSql。由于之前沒(méi)什么經(jīng)...

    張春雷 評(píng)論0 收藏0
  • PHP回顧之流

    摘要:本文先簡(jiǎn)要跟蹤底層流的原理,再回到用戶態(tài)中流的使用。底層流我們知道中的函數(shù)可以打開(kāi)本地文件等并返回一個(gè)句柄,函數(shù)能對(duì)資源句柄進(jìn)行讀寫(xiě),用于關(guān)閉資源。更多關(guān)于底層流的操作可參考官方文檔中開(kāi)發(fā)者的流章節(jié),本文不再深入。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) sessi...

    gself 評(píng)論0 收藏0
  • 從0開(kāi)始構(gòu)建一個(gè)屬于你自己的PHP框架

    摘要:如何構(gòu)建一個(gè)自己的框架為什么我們要去構(gòu)建一個(gè)自己的框架可能絕大多數(shù)的人都會(huì)說(shuō)市面上已經(jīng)那么多的框架了,還造什么輪子。 showImg(https://segmentfault.com/img/bVNg9F?w=500&h=500); 如何構(gòu)建一個(gè)自己的PHP框架 為什么我們要去構(gòu)建一個(gè)自己的PHP框架?可能絕大多數(shù)的人都會(huì)說(shuō)市面上已經(jīng)那么多的框架了,還造什么輪子?。我的觀點(diǎn)造輪子不是目...

    vpants 評(píng)論0 收藏0
  • 途牛原創(chuàng)|大話權(quán)限中心的PHP架構(gòu)之道

    摘要:權(quán)限中心的依賴(lài)聲明聲明依賴(lài)關(guān)系檢查代碼規(guī)范聲明開(kāi)發(fā)依賴(lài)命名空間檢查代碼規(guī)范,執(zhí)行單元測(cè)試。單元測(cè)試持續(xù)交付一切都如此的完美,沒(méi)有測(cè)試,又如何可以證明這件事情的完美,又如何可以保障交付的質(zhì)量。 序 權(quán)限管理是無(wú)線運(yùn)營(yíng)系統(tǒng)中的核心模塊,通過(guò)訪問(wèn)控制策略的配置,來(lái)約定人與資源的訪問(wèn)關(guān)系。 本文著重講解如何通過(guò)PHP來(lái)構(gòu)建一個(gè)靈活、通用、安全的權(quán)限管理系統(tǒng)。 關(guān)于權(quán)限 首先我們來(lái)聊聊權(quán)限。 權(quán)...

    miracledan 評(píng)論0 收藏0
  • php性能怎么優(yōu)化?php性能優(yōu)化及安全策略

    摘要:性能問(wèn)題一般不會(huì)超過(guò)占整個(gè)項(xiàng)目性能的,一般在。內(nèi)置函數(shù)的性能優(yōu)劣。幾乎與在函數(shù)中調(diào)用局部變量的速度相當(dāng)。遞增一個(gè)全局變量要比遞增一個(gè)局部變量慢倍。類(lèi)似的方法調(diào)用所花費(fèi)的時(shí)間接近于次的局部變量遞增操作。 php性能怎么優(yōu)化?性能是網(wǎng)站運(yùn)行是否良好的關(guān)鍵因素, 網(wǎng)站的性能與效率影響著公司的運(yùn)營(yíng)成本及長(zhǎng)遠(yuǎn)發(fā)展,編寫(xiě)出高質(zhì)高效的代碼是我們每個(gè)開(kāi)發(fā)人員必備的素質(zhì),也是我們良好...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<