導航:首頁 > 編程語言 > phppdo好處

phppdo好處

發布時間:2022-09-02 00:26:13

php使用pdo連接資料庫時,其中有個屬性是長連接,請問設置了這個屬性有啥好處與壞處

如果操作這個數據的人不多,並你進行長連接的連接資源使用很頻繁的話使用長連接。這樣速度比較快。

顧名思義,長連接就是一直連接從未斷開。你應該清楚資料庫連接有的是限定連接個數的。你一直連接就佔用了一個連接資源。如果連接這個資料庫的人不多的話,這樣沒問題,還能加快速度,你每次操作資料庫的時候不用在進行連接操作。這樣會加快效率。

如果這個資料庫使用的人比較多的話,最好使用短鏈接,這樣用完就釋放。不會一直占著連接資源。導致其他人想用都連接不上。

⑵ 請簡述PHP中的PDO擴展的作用是什麼。 (1分)

PDO一是PHP數據對象(PHP Data Object)的縮寫。

並不能使用PDO擴展本身執行任何資料庫操作,必須使用一個database-specific PDO driver(針對特定資料庫的PDO驅動)訪問資料庫伺服器。
PDO並不提供資料庫抽象,它並不會重寫SQL或提供資料庫本身缺失的功能,如果你需要這種功能,你需要使用一個更加成熟的抽象層。
PDO需要PHP5核心OO特性的支持,所以它無法運行於之前的PHP版本。

⑶ php中的pdo是什麼

PDO擴展為PHP訪問資料庫定義了一個輕量級的、一致性的介面,它提供了一個數據訪問抽象層,這樣,無論使用什麼資料庫,都可以通過一致的函數執行查詢和獲取數據。PDO隨PHP5.1發行,在PHP5.0的PECL擴展中也可以使用。

⑷ Php中的pdo是什麼意思啊舉個例子指點迷津!

就是操作資料庫的方法,
pdo就是把操作資料庫的函數封裝成一個pdo類,其間做了安全驗證而已。
在使用PDO之前首先要設置PHP.INI文件,使PHP支持PDO,因為PHP5默認是不支持的。在PHP安裝目錄下找到PHP.INI文件,打開並搜索extension=php_pdo.dll 和 extension=php_pdo_mysql.dll,將前面的分號(;)去掉,重啟apache即可。
接下來我們就開始寫PHP代碼了,首先是連接資料庫,看下面的例子:
<!--?php
define('DB_NAME', 'pdo_test');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
try {
$DBH = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);
$DBH--->exec('SET CHARACTER SET '.DB_CHARSET);
$DBH->exec('SET NAMES '.DB_CHARSET);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br>";
die();
}
?>
連接成功後,我們需要對資料庫中的數據進行增刪改查操作,這里主要用到exec和query兩個函數。

示例:
<!--?php
//增加數據
$sql_insert = 'Insert INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,'.time().rand(1,100).','.time().rand(1,100).',\'no\')';
$back = $DBH--->exec($sql_insert); //返回 bool 的true or fal
$lastInsertId = $DBH->lastInsertId();
//刪除數據
$sql_delete = 'Delete FROM wp_options Where option_id='.$lastInsertId;
$back = $DBH->exec($sql_delete); //返回 bool 的true or fal
$lastInsertId = $DBH->lastInsertId();
//更新數據
$sql_update = 'Update wp_options SET option_name = \''.time().rand(1,100).'\' Where option_id='.$lastInsertId;
$lastUpdateId = $DBH->lastInsertId(); //返回的對應的操作的id
//查詢數據
$sql_select = 'Select option_id FROM wp_options orDER BY option_id DESC LIMIT 4 ';
$back = $DBH->query($sql_select); //返回一個對象 這個對象可以用foreach 直接遍歷循環 循環的為查詢的結果集
$back = $DBH->query($sql_select)->fetch(); //返回一條數據結果 這個對象可以用foreach 直接遍歷循環 循環的為查詢的結果集
$back = $DBH->query($sql_select)->fetchAll(); //返回一個數組 這個對象可以用foreach 直接遍歷循環 循環的為查詢的結果集
$back = $DBH->query($sql_select)->fetchColumn(0); //返回一個欄位字元串,這個字元串是返回的記錄的第一條記錄的第一個欄位
?>
到這里,PDO的基本操作基本上結束了。對於一般的企業網站,小型的管理系統基本上能滿足了,但是,如果我們開發大型網站或者邏輯較復雜的管理系統,僅僅靠數據的讀寫是遠遠不夠的,我們可能還需要對資料庫的存儲過程、事務等對象進行操作,下面我們繼續看看用PDO是如何實現的。如果還有更多問題可以去後盾網論壇問題求助專區,希望我的回答對你有幫助!

⑸ PHP+MYSQL(PDO)使用PDO持久連接加預處理查詢 是不是無需關閉資料庫連接

持久連接的實際用處:假如一個php腳本文件,同時會有多個用戶訪問該頁面。
裡面涉及到資料庫查詢操作。
如果使用非持久連接的話,那麼每個用戶都會從新建立一個資料庫連接。
而持久連接,多個用戶訪問同一個文件的時候,可以共享一個資料庫連接標識。
這樣減少了連接次數。

⑹ 為什麼 PHP 應該使用 PDO 方式訪問資料庫

很多程序員都學習過如何使用 MySQL 或 MySQLi 擴展訪問資料庫。在 PHP 5.1 中,有一個更好的方法。PHP Data Objects(PDO) 提供了很多預處理語句的方法,且使用對象將使你的工作更有成效!

PDO 介紹

「PDO – PHP Data Objects – 是一個對多種資料庫提供統一操作方法的資料庫訪問層。」

它並不具備資料庫特有的語法,但它將使切換資料庫和平台更加容易,多數情況下,只需要簡單修改鏈接字元串。

這並非一篇完整教導如何使用SQL的教程。它重要為那些現今仍在使用 mysql 或 mysqli 擴展的人,幫助他們躍至更具可移植性和強力的 PDO。


資料庫支持

此擴展可以使用 PDO 驅動編寫過的所有資料庫。在本文書寫時,下面的資料庫支持已經實現:


PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )

PDO_FIREBIRD ( Firebird/Interbase 6 )

PDO_IBM ( IBM DB2 )

PDO_INFORMIX ( IBM Informix Dynamic Server )

PDO_MYSQL ( MySQL 3.x/4.x/5.x )

PDO_OCI ( Oracle Call Interface )

PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )

PDO_PGSQL ( PostgreSQL )

PDO_SQLITE ( SQLite 3 and SQLite 2 )

PDO_4D ( 4D )

你的系統不會也不必支持所有上面的驅動;下面是一個快速檢查所支持資料庫的方法:


1 print_r(PDO::getAvailableDrivers());

連接

不同資料庫的連接方法可能稍有不同,下面是一些較為流行的資料庫連接方法。你將注意到,雖然資料庫類型不同,前三種資料庫的連接方式是相同的——而 SQLite 使用自己的語法。


Connection String

01 try {

02 # MS SQL Server andSybase with PDO_DBLIB

03 $DBH = newPDO("mssql:host=$host;dbname=$dbname, $user, $pass");

04 $DBH = newPDO("sybase:host=$host;dbname=$dbname, $user, $pass");

05

06 # MySQL with PDO_MYSQL

07 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

08

09 # SQLite Database

10 $DBH = newPDO("sqlite:my/database/path/database.db");

11 }

12 catch(PDOException $e) {

13 echo$e->getMessage();

14 }

注意 try/catch 塊——你應該總是使用 try/catch 包裝你的 PDO 操作,並使用異常機制——這里只是簡單的示例。通常,你只需要一個連接——有很多可以教你語法的列表。 $DBH 代表「資料庫句柄」,這將貫穿全文。


通過將句柄設置為 NULL,你可以關閉任一連接。


1 # close the connection

2 $DBH = null;

你可以在PHP.net找到更多資料庫特定選項和/或其它資料庫連接字元串的信息。


異常與 PDO

PDO 可以使用異常處理錯誤,這意味著你的所有 PDO 操作都應當包裝在一個 try/catch 塊中。你可以通過設定錯誤模式屬性強制 PDO 在新建的句柄中使用三種錯誤模式中的某一個。下面是語法:


1 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );

2 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

3 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

無論你設定哪個錯誤模式,一個錯誤的連接總會產生一個異常,因此創建連接應該總是包裝在 try/catch 塊中。


PDO::ERRMODE_SILENT

這是默認的錯誤模式。如果你使用這個模式,你將得使用同 mysql 或 mysqli 擴展一樣的方法差錯。其它兩種模式更適合 DRY 編程


PDO::ERRMODE_WARNING

此方法將會發出一個標准PHP警告,並允許程序繼續運行。這對調試很有幫助。


PDO::ERRMODE_EXCEPTION

這是多數情況下你所希望的方式。它生成異常,允許你更容易的處理錯誤,隱藏可能導致它人了解你系統的信息。下面是一個充分利用異常的示例:


01 # connect to the database

02 try {

03 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

04 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

05

06 # UH-OH! Typed DELECT instead of SELECT!

07 $DBH->prepare('DELECT name FROM people');

08 }

09 catch(PDOException $e) {

10 echo"I'm sorry, Dave. I'm afraid I can't do that.";

11 file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);

12 }

在 select 語句中有一個故意留下的錯誤;這將導致一個異常。異常錯誤細節保存至一個 log 文件,並生成一段友好的(或不怎麼友好的)信息於用戶。


插入和更新

插入新數據,更新已存數據是一種非常常見的資料庫操作。使用 PDO,這通常需要兩個步驟。本節中所述的所有內容對更新和插入都有效。

這里有一個最基本的插入示例:


1 # STH means "Statement Handle"

2 $STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");

3 $STH->execute();

你也可以使用 exec() 完成相同的操作,這將減少調用。多數情況下,你會使用調用多的方法,以充分利用語句預處理的優勢。即使你只用它一次,使用語句預處理,幫助你保護你的 SQL 免於注入攻擊。


預處理語句

使用語句預處理將幫助你免於SQL注入攻擊。


一條預處理語句是一條預編譯的 SQL 語句,它可以使用多次,每次只需將數據傳至伺服器。其額外優勢在於可以對使用佔位符的數據進行安全處理,防止SQL注入攻擊。


你通過在 SQL 語句中使用佔位符的方法使用預處理語句。下面是三個例子:一個沒有佔位符,一個使用無名佔位符,一個使用命名佔位符。


1 # no placeholders - ripe for SQL Injection!

2 $STH = $DBH->("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");

3

4 # unnamed placeholders

5 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);

6

7 # named placeholders

8 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

你希望避免第一種方法。選擇命名我無名佔位符將會對你對語句中數據的設置產生影響。


無名佔位符

01 # assign variables to each place holder, indexed 1-3

02 $STH->bindParam(1, $name);

03 $STH->bindParam(2, $addr);

04 $STH->bindParam(3, $city);

05

06 # insert one row

07 $name = "Daniel"

08 $addr = "1 Wicked Way";

09 $city = "Arlington Heights";

10 $STH->execute();

11

12 # insert another row with different values

13 $name = "Steve"

14 $addr = "5 Circle Drive";

15 $city = "Schaumburg";

16 $STH->execute();

這里有兩步。首先,我們對各個佔位符指定變數(2-4行)。然後,我們對各個佔位符指定數據,並執行語句。要發送另一組數據,只需改變這些變數的值並再次執行語句。


這種方法看上去對擁有很多參數的語句很笨拙吧?的確。然而,當數據保存於數組中時,這非常容易簡略:


1 # the data we want to insert

2 $data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');

3

4 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);

5 $STH->execute($data);

容易吧!


數組中的數據按順序填入佔位符中。 $data[0]是第一個,$data[1]是第二個,依次。不過,要是數組中數據的次序不正確,這將不能正常運行,你需要先對數組排序。


命名佔位符

你可能已經開始猜測語法了,不過下面就是示例:


1 # the first argument is the named placeholder name - notice named

2 # placeholders always start with a colon.

3 $STH->bindParam(':name', $name);

你可以看使用快捷方式,但它需使用關聯數組。下面是示例:


1 # the data we want to insert

2 $data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );

3

4 # the shortcut!

5 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

6 $STH->execute($data);

數組中的鍵不需要以冒號開頭,但其它部分需要同佔位符匹配。如果你有一個二維數組,你只需遍歷它,並對遍歷的每個數組執行語句。


命名佔位符的另一個好的功能是直接將對象插入到你的資料庫中,只要屬性同命名欄位匹配。下面是一個示例對象,以及如何將它插入到資料庫中的示例:


01 # a simple object

02 class person {

03 public $name;

04 public $addr;

05 public $city;

06

07 function __construct($n,$a,$c) {

08 $this->name = $n;

09 $this->addr = $a;

10 $this->city = $c;

11 }

12 # etc ...

13 }

14

15 $cathy = new person('Cathy','9 Dark and Twisty','Cardiff');

16

17 # here's the fun part:

18 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

19 $STH->execute((array)$cathy);

通過在執行時將對象轉換為數組,輸將將會同數組的鍵一樣對待。

⑺ 為什麼說PHP必須要用PDO

根據PHP官方計劃,PHP6正式到來之時,資料庫鏈接方式統一為PDO。但是總有一小撮頑固分子,趁PHP官方還沒正式統一時,還用老式的MYSQL驅動鏈接資料庫。即使現在有部分程序改用Mysqli/pdo,只要沒用到預編譯,均和老式的Mysql驅動沒多大區別。在此,我就不點評國內的PHP生態環境了。
回歸主題,為什麼說PHP必須要用PDO?除了官方要求之外,我認為作為PHP程序員,只要你目前是做開發的話,那麼請選擇用PDO的程序/框架!PDO除了安全和萬金油式資料庫鏈接,還有一點是我目前覺得非常好用的!下面我就用我最近的切身體會來說。
業務環境:公司某老架構,資料庫設計的人員太菜了,設計過程完全沒有按照資料庫範式進行。各種表中使用大量的序列化形式保存(補充:json同理)。
出現問題:銷售的客服反饋,網站某用戶在編輯地址時,Mysql報錯了。
問題猜想:不用說了。肯定是引號,反斜杠引起序列化入庫不正常。

⑻ php中使用pdo連接資料庫長連接是啥意思,有什麼好處和壞處

不會隨著訪問結束斷開連接

閱讀全文

與phppdo好處相關的資料

熱點內容
拍攝指南by小說製造機txt下載 瀏覽:737
豆瓣pdf 瀏覽:723
春宮妖姬演員表 瀏覽:112
韓國情愛電影在線 瀏覽:812
程序員那麼可愛顧墨吃醋 瀏覽:201
伺服器未測速怎麼辦 瀏覽:15
男主角林晨的都市小說 瀏覽:899
百度文庫系統源碼nodejs 瀏覽:997
電影院正在上映的電影怎麼在家看 瀏覽:61
永輝生活app如何使用手機閃付 瀏覽:178
吸奶的電影 瀏覽:986
對越自衛反擊戰電影大全集免費 瀏覽:565
一起看電影網站源碼 瀏覽:909
阿甘正傳阿甘的英文名 瀏覽:159
電影天名 瀏覽:626
弱視矯治系統源碼 瀏覽:899
金融市場基礎知識pdf 瀏覽:383
三沒降頭電影 瀏覽:586
黃色武俠小說txt下載 瀏覽:531
如何將伺服器轉移至阿里平台 瀏覽:744