當前位置:首頁 » 文件管理 » pdo緩存

pdo緩存

發布時間: 2022-11-07 05:42:19

php 關於PDO自定義類里的函數 傳什麼樣的參數

目前而言,實現「資料庫抽象層」任重而道遠,使用PDO這樣的「資料庫訪問抽象層」是一個不錯的選擇。
PDO中包含三個預定義的類
PDO中包含三個預定義的類,它們分別是 PDO、PDOStatement 和 PDOException。
一、PDO
PDO->beginTransaction() — 標明回滾起始點
PDO->commit() — 標明回滾結束點,並執行sql
PDO->__construct() — 建立一個PDO鏈接資料庫的實例
PDO->errorCode() — 獲取錯誤碼
PDO->errorInfo() — 獲取錯誤的信息
PDO->exec() — 處理一條SQL語句,並返回所影響的條目數
PDO->getAttribute() — 獲取一個「資料庫連接對象」的屬性
PDO->getAvailableDrivers() — 獲取有效的PDO驅動器名稱
PDO->lastInsertId() — 獲取寫入的最後一條數據的主鍵值
PDO->prepare() — 生成一個「查詢對象」
PDO->query() — 處理一條SQL語句,並返回一個「PDOStatement」
PDO->quote() — 為某個SQL中的字元串添加引號
PDO->rollBack() — 執行回滾
PDO->setAttribute() — 為一個「資料庫連接對象」設定屬性
二、PDOStatement
PDOStatement->bindColumn() — Bind a column to a PHP variable
PDOStatement->bindParam() — Binds a parameter to the specified variable name
PDOStatement->bindValue() — Binds a value to a parameter
PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be executed again.
PDOStatement->columnCount() — Returns the number of columns in the result set
PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last operation on the statement handle
PDOStatement->errorInfo() — Fetch extended error information associated with the last operation on the statement handle
PDOStatement->execute() — Executes a prepared statement
PDOStatement->fetch() — Fetches the next row from a result set
PDOStatement->fetchAll() — Returns an array containing all of the result set rows
PDOStatement->fetchColumn() — Returns a single column from the next row of a result set
PDOStatement->fetchObject() — Fetches the next row and returns it as an object.
PDOStatement->getAttribute() — Retrieve a statement attribute
PDOStatement->getColumnMeta() — Returns metadata for a column in a result set
PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset statement handle
PDOStatement->rowCount() — Returns the number of rows affected by the last SQL statement
PDOStatement->setAttribute() — Set a statement attribute
PDOStatement->setFetchMode() — Set the default fetch mode for this statement
PDO是一個「資料庫訪問抽象層」,作用是統一各種資料庫的訪問介面,與mysql和mysqli的函數庫相比,PDO讓跨資料庫的使用更具有親和力;與ADODB和MDB2相比,PDO更高效。目前而言,實現「資料庫抽象層」任重而道遠,使用PDO這樣的「資料庫訪問抽象層」是一個不錯的選擇。
PDO中包含三個預定義的類
PDO中包含三個預定義的類,它們分別是 PDO、PDOStatement 和 PDOException。
一、PDO
PDO->beginTransaction() — 標明回滾起始點
PDO->commit() — 標明回滾結束點,並執行SQL
PDO->rollBack() — 執行回滾
PDO->__construct() — 建立一個PDO鏈接資料庫的實例
PDO->errorCode() — 獲取錯誤碼
PDO->errorInfo() — 獲取錯誤的信息
PDO->exec() — 處理一條SQL語句,並返回所影響的條目數
PDO->getAttribute() — 獲取一個「資料庫連接對象」的屬性
PDO->getAvailableDrivers() — 獲取有效的PDO驅動器名稱
PDO->lastInsertId() — 獲取寫入的最後一條數據的主鍵值
PDO->prepare() — 生成一個「查詢對象」
PDO->query() — 處理一條SQL語句,並返回一個「PDOStatement」
PDO->quote() — 為某個SQL中的字元串添加引號
PDO->setAttribute() — 為一個「資料庫連接對象」設定屬性
詳解1) PDO中的資料庫連接
$dsn = 『mysql:dbname=ent;host=127.0.0.1′;
$user = 『root';
$password = 『123456′;
try {
$dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => true));
$dbh->query('set names utf8;');
foreach ($dbh->query('SELECT * from tpm_juese') as $row) {
print_r($row);
}
} catch (PDOException $e) {
echo 『Connection failed: 『 . $e->getMessage();
}
許多Web應用會因為使用了向資料庫的持久連接而得到優化。持久連接不會在腳本結束時關閉,
相反它會被緩存起來並在另一個腳本通過同樣的標識請求一個連接時得以重新利用。
持久連接的緩存可以使你避免在腳本每次需要與資料庫對話時都要部署一個新的連接的資源消耗,讓你的Web應用更加快速。
上面實例中的array(PDO::ATTR_PERSISTENT => true)就是把連接類型設置為持久連接。
詳解2) PDO中的事務
PDO->beginTransaction(),PDO->commit(),PDO->rollBack()這三個方法是在支持回滾功能時一起使用的。PDO->beginTransaction()方法標明起始點,PDO->commit()方法標明回滾結束點,並執行SQL,PDO->rollBack()執行回滾。
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', 『root', 」);
$dbh->query('set names utf8;');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec(」INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);」);
$dbh->exec(」INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);」);
$dbh->exec(」INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);」);
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo 「Failed: 」 . $e->getMessage();
}
?>
現在你已經通過PDO建立了連接,在部署查詢之前你必須搞明白PDO是怎樣管理事務的。如果你以前從未遇到過事務處理,(現在簡單介紹一下:)它們提供了4個主要的特性:原子性,一致性,獨立性和持久性(Atomicity, Consistency, Isolation and Durability,ACID)通俗一點講,一個事務中所有的工作在提交時,即使它是分階段執行的,也要保證安全地應用於資料庫,不被其他的連接干擾。事務工作也可以在請求發生錯誤時輕松地自動取消。
事務的典型運用就是通過把批量的改變「保存起來」然後立即執行。這樣就會有徹底地提高更新效率的好處。換句話說,事務可以使你的腳本更快速同時可能更健壯(要實現這個優點你仍然需要正確的使用它們)。
不幸運的是,並不是每個資料庫都支持事務,因此PDO需要在建立連接時運行在被認為是「自動提交」的模式下。自動提交模式意味著你執行的每個查詢都有它自己隱含的事務處理,無論資料庫支持事務還是因資料庫不支持而不存在事務。如果你需要一個事務,你必須使用 PDO->beginTransaction() 方法創建一個。如果底層驅動不支持事務處理,一個PDOException就會被拋出(與你的異常處理設置無關,因為這總是一個嚴重的錯誤狀態)。在一個事物中,你可以使用 PDO->commit() 或 PDO->rollBack() 結束它,這取決於事務中代碼運行是否成功。
當腳本結束時或一個連接要關閉時,如果你還有一個未處理完的事務,PDO將會自動將其回滾。這是對於腳本意外終止的情況來說是一個安全的方案——如果你沒有明確地提交事務,它將會假設發生了一些錯誤,為了你數據的安全,所以就執行回滾了。
二、PDOStatement
PDOStatement->bindColumn() — Bind a column to a PHP variable
PDOStatement->bindParam() — Binds a parameter to the specified variable name
PDOStatement->bindValue() — Binds a value to a parameter
PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be executed again.
PDOStatement->columnCount() — Returns the number of columns in the result set
PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last operation on the statement handle
PDOStatement->errorInfo() — Fetch extended error information associated with the last operation on the statement handle
PDOStatement->execute() — Executes a prepared statement
PDOStatement->fetch() — Fetches the next row from a result set
PDOStatement->fetchAll() — Returns an array containing all of the result set rows
PDOStatement->fetchColumn() — Returns a single column from the next row of a result set
PDOStatement->fetchObject() — Fetches the next row and returns it as an object.
PDOStatement->getAttribute() — Retrieve a statement attribute
PDOStatement->getColumnMeta() — Returns metadata for a column in a result set
PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset statement handle
PDOStatement->rowCount() — Returns the number of rows affected by the last SQL statement
PDOStatement->setAttribute() — Set a statement attribute
PDOStatement->setFetchMode() — Set the default fetch mode for this statement
三、PDOException
PDO 提供了3中不同的錯誤處理策略。
1. PDO::ERRMODE_SILENT
這是默認使用的模式。PDO會在statement和database對象上設定簡單的錯誤代號,你可以使用PDO->errorCode() 和 PDO->errorInfo() 方法檢查錯誤;如果錯誤是在對statement對象進行調用時導致的,你就可以在那個對象上使用 PDOStatement->errorCode() 或 PDOStatement->errorInfo() 方法取得錯誤信息。而如果錯誤是在對database對象調用時導致的,你就應該在這個database對象上調用那兩個方法。
2. PDO::ERRMODE_WARNING
作為設置錯誤代號的附加,PDO將會發出一個傳統的E_WARNING信息。這種設置在除錯和調試時是很有用的,如果你只是想看看發生了什麼問題而不想中斷程序的流程的話。
3. PDO::ERRMODE_EXCEPTION
作為設置錯誤代號的附件,PDO會拋出一個PDOException異常並設置它的屬性來反映錯誤代號和錯誤信息。這中設置在除錯時也是很有用的,因為他會有效的「放大(blow up)」腳本中的出錯點,非常快速的指向一個你代碼中可能出錯區域。(記住:如果異常導致腳本中斷,事務處理回自動回滾。)
異常模式也是非常有用的,因為你可以使用比以前那種使用傳統的PHP風格的錯誤處理結構更清晰的結構處理錯誤,比使用安靜模式使用更少的代碼及嵌套,也能夠更加明確地檢查每個資料庫訪問的返回值。
關於PHP中異常的更多信息請看Exceptions章節
PDO 使用基於SQL-92 SQLSTATE 的錯誤代號字元串;特定的PDO驅動應當將自己本身的代號對應到適當的SQLSTATE代號上。PDO->errorCode() 方法只返回單一的SQLSTATE代號。如果你需要關於一個錯誤的更加有針對性的信息,PDO也提供了一個PDO->errorInfo()方法,它可以返回一個包含了SQLSTATE代號,特定資料庫驅動的錯誤代號和特定資料庫驅動的錯誤說明字元串。

② php memcache怎麼緩存頁面

$mem = new Memcache; $mem -> connect('localhost', 11211); $key="mysum"; $sum = $mem->get($key); if(empty($sum)) { include_once("connect.php"); $stmt = $pdo -> prepare("select * from pic8 where toid=? order by ptime "); $stm

③ PHP PDO 預處理是怎麼緩存的呢

預處理語句的主要作用有以下兩點:

  1. 更安全,PDO或底層資料庫的庫會特別照顧那些沒有採取約束條件的綁定變數.如果你總是使用預處理語句,你將不會容易受到SQL的注入攻擊。

  2. 有時候查詢可能更快,許多資料庫會緩存查詢計劃里的預處理語句,並用符號參照事先准備好聲明,而不是重新傳輸整個查詢文本。最明顯的是,你只要聲明過一次預處理對象,後面就能在遇到不同變數時重用該預處理語句對象。

  3. 這兩個中,更安全顯然是更加重要的,這使得預處理語句缺一不可。效率高的話我覺得可能是在多個預處理中它都使用同個對象,這部分提高了效率。

④ 在PHP中怎麼解決大量數據處理的問題

mysql_query函數查詢的方式是查詢出全部結果後緩存到內存中,這樣就會出現超內存的現象,使用另外一個函數mysql_unbuffered_query可以解決這個問題,mysql_unbuffered_query不會緩存結果集,而是查詢出來數據後立馬對結果集進行操作,也就是便查詢邊返回,這樣就不會出現超出內存的現象,但是使用mysql_unbuffered_query的是時候不能使用 mysql_num_rows() 和 mysql_data_seek()。並且向 MySQL 發送一條新的 SQL 查詢之前,必須提取掉所有未緩存的 SQL 查詢所產生的結果行。例如:

使用緩存結果集的代碼:

function selecttest()
{
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');
// 不使用緩存結果集方式
// $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$sth = $pdo->prepare('select * from test');
$sth->execute();
echo '最初佔用內存大小:' . memory_get_usage() . "\n";
$i = 0;
while ($result = $sth->fetch(PDO::FETCH_ASSOC)) {
$i += 1;
if ($i > 10) {
break;
}
sleep(1);
print_r($result);
echo '佔用內存大小:' . memory_get_usage() . "\n";
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
執行時將會報超出內存的錯誤:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php on line 56

Call Stack:
0.0005 135392 1. {main}() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:0
0.0005 135568 2. test->selecttest() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:85
0.0050 142528 3. PDOStatement->execute() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:56
將上面代碼中的$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);一行的注釋去掉後將不在緩存結果集,這時運行該函數的結果如下:

最初佔用內存大小:144808
Array
(
[id] => 1
[a] => v
[b] => w
[c] => i
)
佔用內存大小:145544
Array
(
[id] => 2
[a] => b
[b] => l
[c] => q
)
佔用內存大小:145544
Array
(
[id] => 3
[a] => m
[b] => p
[c] => h
)
佔用內存大小:145536
Array
(
[id] => 4
[a] => j
[b] => i
[c] => b
)
佔用內存大小:145536
可以看到,這時返回一條數據內存佔用非常的小,也就700多位元組,這樣就不會出現超出內存的錯誤了。

⑤ php中用參數傳遞的pdo查詢語句怎麼寫

方法 bindParam() 和 bindValue() 非常相似。
唯一的區別就是前者使用一個PHP變數綁定參數,而後者使用一個值。
所以使用bindParam是第二個參數只能用變數名,而不能用變數值,而bindValue至可以使用具體值。
復制代碼 代碼如下:

$stm = $pdo->prepare("select * from users where user = :user");
$user = "jack";
//正確
$stm->bindParam(":user",$user);
//錯誤
//$stm->bindParam(":user","jack");
//正確
$stm->bindValue(":user",$user);
//正確
$stm->bindValue(":user","jack");

另外在存儲過程中,bindParam可以綁定為input/output變數,如下面:
復制代碼 代碼如下:

$stm = $pdo->prepare("call func(:param1)");
$param1 = "abcd";
$stm->bindParam(":param1",$param1); //正確
$stm->execute();

存儲過程執行過後的結果可以直接反應到變數上。
對於那些內存中的大數據塊參數,處於性能的考慮,應優先使用前者。
--------------------------------------------------
http://zh.wikipedia.org/wiki/%E5%8F%83%E6%95%B8%E5%8C%96%E6%9F%A5%E8%A9%A2
參數化查詢
參數化查詢(Parameterized Query 或 Parameterized Statement)是指在設計與資料庫連結並訪問數據時,在需要填入數值或數據的地方,使用參數 (Parameter) 來給值,這個方法目前已被視為最有效可預防SQL注入攻擊 (SQL Injection) 的攻擊手法的防禦方式。有部份的開發人員可能會認為使用參數化查詢,會讓程序更不好維護,或者在實現部份功能上會非常不便[來源請求],然而,使用參數化查詢造成的額外開發成本,通常都遠低於因為SQL注入攻擊漏洞被發現而遭受攻擊,所造成的重大損失。
除了安全因素,相比起拼接字元串的 SQL 語句,參數化的查詢往往有性能優勢。因為參數化的查詢能讓不同的數據通過參數到達資料庫,從而公用同一條 SQL 語句。大多數資料庫會緩存解釋 SQL 語句產生的位元組碼而省下重復解析的開銷。如果採取拼接字元串的 SQL 語句,則會由於操作數據是 SQL 語句的一部分而非參數的一部分,而反復大量解釋 SQL 語句產生不必要的開銷。
目錄
* 1 原理
* 2 SQL 指令撰寫方法
o 2.1 Microsoft SQL Server
o 2.2 Microsoft Access
o 2.3 MySQL
o 2.4 PostgreSQL/SQLite
* 3 客戶端程序撰寫方法
o 3.1 ADO.NET
o 3.2 PDO
o 3.3 JDBC
o 3.4 Cold Fusion
[編輯] 原理
在使用參數化查詢的情況下,資料庫伺服器不會將參數的內容視為SQL指令的一部份來處理,而是在資料庫完成 SQL 指令的編譯後,才套用參數運行,因此就算參數中含有具破壞性的指令,也不會被資料庫所運行。
[編輯] SQL 指令撰寫方法
在撰寫 SQL 指令時,利用參數來代表需要填入的數值,例如:
[編輯] Microsoft SQL Server
Microsoft SQL Server 的參數格式是以 "@" 字元加上參數名稱而成,SQL Server 亦支持匿名參數 "?"。
SELECT * FROM myTable WHERE myID = @myID
INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)
[編輯] Microsoft Access
Microsoft Access 不支持具名參數,只支持匿名參數 "?"。
UPDATE myTable SET c1 = ?, c2 = ?, c3 = ? WHERE c4 = ?
[編輯] MySQL
MySQL 的參數格式是以 "?" 字元加上參數名稱而成。
UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4
[編輯] PostgreSQL/SQLite
PostgreSQL 和 SQLite 的參數格式是以 「:」 加上參數名而成。當然,也支持類似 Access 的匿名參數。
UPDATE "myTable" SET "c1" = :c1, "c2" = :c2, "c3" = :c3 WHERE "c4" = :c4
[編輯] 客戶端程序撰寫方法
在客戶端代碼中撰寫使用參數的代碼,例如:
[編輯] ADO.NET
ADO.NET用於ASP.NET之內。
SqlCommand sqlcmd = new SqlCommand("INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)", sqlconn);
sqlcmd.Parameters.AddWithValue("@c1", 1); // 設定參數 @c1 的值。
sqlcmd.Parameters.AddWithValue("@c2", 2); // 設定參數 @c2 的值。
sqlcmd.Parameters.AddWithValue("@c3", 3); // 設定參數 @c3 的值。
sqlcmd.Parameters.AddWithValue("@c4", 4); // 設定參數 @c4 的值。
sqlconn.Open();
sqlcmd.ExecuteNonQuery();
sqlconn.Close();
[編輯] PDO
PDO用於PHP之內。 在使用 PDO 驅動時,參數查詢的使用方法一般為:
復制代碼 代碼如下:

// 實例化數據抽象層對象
$db = new PDO('pgsql:host=127.0.0.1;port=5432;dbname=testdb');
// 對 SQL 語句執行 prepare,得到 PDOStatement 對象
$stmt = $db->prepare('SELECT * FROM "myTable" WHERE "id" = :id AND "is_valid" = :is_valid');
// 綁定參數
$stmt->bindValue(':id', $id);
$stmt->bindValue(':is_valid', true);
// 查詢
$stmt->execute();
// 獲取數據
foreach($stmt as $row) {
var_mp($row);
}
[code]
對於 MySQL 的特定驅動,也可以這樣使用:
$db = new mysqli("localhost", "user", "pass", "database");
$stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?");
$stmt -> bind_param("ss", $user, $pass);
$stmt -> execute();
值得注意的是,以下方式雖然能有效防止 SQL注入 (歸功於 mysql_real_escape_string 函數的轉義),但並不是真正的參數化查詢。其本質仍然是拼接字元串的 SQL 語句。
[code]
$query = sprintf("SELECT * FROM Users where UserName='%s' and Password='%s'",
mysql_real_escape_string($Username),
mysql_real_escape_string($Password));
mysql_query($query);

[編輯] JDBC
JDBC用於java之內。
java.sql.PreparedStatement prep = connection.prepareStatement(
"SELECT * FROM `users` WHERE USERNAME = ? AND PASSWORD = ?");
prep.setString(1, username);
prep.setString(2, password);
prep.executeQuery();
[編輯] Cold Fusion
<cfquery name="Recordset1" datasource="cafetownsend">
SELECT *
FROM COMMENTS
WHERE COMMENT_ID =<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric">
</cfquery>

⑥ PHP+PDO+sqlite 資料庫操作問題

PDO默認的錯誤處理模式是靜默模式,即出了錯不會報錯的;你可以用PDO::setAttribute(
PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING)設置為警告模式,就會報錯了;
但是這里報的錯誤是指語法錯誤;所以DELETE、INSERT、 或 UPDATE都用受影響的行數來進行判斷;返回0,表示不成功;PDOStatement::rowCount()

⑦ PHP Memcache緩存數據問題

$mem = new Memcache;
$mem -> connect('localhost', 11211);
$key="mysum";
$sum = $mem->get($key);
if(empty($sum)) {
include_once("connect.php");
$stmt = $pdo -> prepare("select * from pic8 where toid=? order by ptime ");
$stmt -> setFetchMode(PDO::FETCH_ASSOC);
$stmt -> execute(array(5));
while($row=$stmt -> fetch()){
$a= " <li> "
. " <div class=\"title\"><a href=\" $pic_href\"> $pic_dm </a></div>"
. " <div class=\"img\"><a href=\" $pic_href\"><img src=\"/shop/$pic_url\" alt=\" $pic_dm \" /></a></div>"
. " </li> "
."";
$sum=$sum.$a;}
$mem -> add($key,$sum,MEMCACHE_COMPRESSED,10);
echo"這是第一次訪問從資料庫取數據放入內存中!<br>"; }
echo $sum;

⑧ PHP 的 pdo 方法,怎麼返回欄位名

PDO是PDO, Mysqli是Mysqli,我們沒辦法要求PDO像Mysqli保持一樣的結構和設計。
也許你會覺得mysqli的fetch_field很方便,但是實際上這個方法的使用概率極低,因為通常會讀出表的所有欄位信息並緩存起來,而不是總是進行欄位查詢。
表現最明顯的框架如Cakephp,當你用直接編輯數據表的方法增加了一個新欄位之後數據並不會被保存到這個欄位中,必須先清除緩存的數據表信息才行。

通過閱讀不同的PHP框架,我們可以發現極少會有框架需要開發人員直接調用PDO或者mysqli對象去執行sql,它們往往將其通過DbAdapter之類的介面進行封裝。我建議你思考這樣做的好處然後優化自己的代碼結構。你問題中的這個行為通常也不需要封裝在db對象中,一般是在Table對象處理,例如

class Table {

protected $_tableName;
public function __construct($tableName);
protected function _readFieldsPrototype();
protected function _getCachedFieldsPrototype();
public function getFieldPrototype($filed);
}

⑨ PHP緩存集成庫phpFastCache用法

本文實例講述了PHP緩存集成庫phpFastCache用法。分享給大家供大家參考。具體分析如下:
phpFastCache是一個開源的PHP緩存庫,只提供一個簡單的PHP文件,可方便集成到已有項目,支持多種緩存方法,包括:apc,
memcache,
memcached,
wincache,
files,
pdo
and
mpdo。可通過簡單的API來定義緩存的有效時間。
復制代碼
代碼如下:<?php
//
In
your
config
file
include("phpfastcache/phpfastcache.php");
phpFastCache::setup("storage","auto");
//
phpFastCache
support
"apc",
"memcache",
"memcached",
"wincache"
,"files",
"sqlite"
and
"xcache"
//
You
don't
need
to
change
your
code
when
you
change
your
caching
system.
Or
simple
keep
it
auto
$cache
=
phpFastCache();
//
In
your
Class,
Functions,
PHP
Pages
//
try
to
get
from
Cache
first.
proct_page
=
YOUR
Identity
Keyword
$procts
=
$cache->get("proct_page");
if($procts
==
null)
{

$procts
=
YOUR
DB
QUERIES
||
GET_PRODUCTS_FUNCTION;

//
set
procts
in
to
cache
in
600
seconds
=
10
minutes

$cache->set("proct_page",
$procts,600);
}
//
Output
Your
Contents
$procts
HERE

⑩ php連接mysql資料庫原理是怎樣的

現在使用PDO鏈接資料庫的較多

連接是通過創建 PDO 基類的實例而建立的。不管使用哪種驅動程序,都是用 PDO 類名。構造函數接收用於指定資料庫源(所謂的 DSN)以及可能還包括用戶名和密碼(如果有的話)的參數。

連接到 MySQL


<?php
$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);
?>

如果有任何連接錯誤,將拋出一個 PDOException 異常對象。如果想處理錯誤狀態,可以捕獲異常,或者選擇留給通過 set_exception_handler() 設置的應用程序全局異常處理程序。

處理連接錯誤


<?php
try{
$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);
foreach($dbh->query('SELECT*fromFOO')as$row){
print_r($row);
}
$dbh=null;
}catch(PDOException$e){
print"Error!:".$e->getMessage()."<br/>";
die();
}
?>

如果應用程序不在 PDO 構造函數中捕獲異常,zend 引擎採取的默認動作是結束腳本並顯示一個回溯跟蹤,此回溯跟蹤可能泄漏完整的資料庫連接細節,包括用戶名和密碼。因此有責任去顯式(通過 catch 語句)或隱式(通過 set_exception_handler() )地捕獲異常。

連接數據成功後,返回一個 PDO 類的實例給腳本,此連接在 PDO 對象的生存周期中保持活動。要想關閉連接,需要銷毀對象以確保所有剩餘到它的引用都被刪除,可以賦一個 NULL 值給對象變數。如果不明確地這么做,PHP 在腳本結束時會自動關閉連接。

關閉一個連接

<?php
$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);
//在此使用連接
//現在運行完成,在此關閉連接
$dbh=null;
?>

很多 web 應用程序通過使用到資料庫服務的持久連接獲得好處。持久連接在腳本結束後不會被關閉,且被緩存,當另一個使用相同憑證的腳本連接請求時被重用。持久連接緩存可以避免每次腳本需要與資料庫回話時建立一個新連接的開銷,從而讓 web 應用程序更快。

熱點內容
怎麼看qq綁定了微信賬號密碼是什麼 發布:2024-10-06 16:04:41 瀏覽:772
安卓電視裝軟體對電視有什麼影響 發布:2024-10-06 16:01:54 瀏覽:440
編程廣播積木 發布:2024-10-06 16:01:42 瀏覽:88
聽音樂有緩存文件嗎 發布:2024-10-06 15:56:10 瀏覽:84
等級演算法 發布:2024-10-06 15:45:26 瀏覽:874
伺服器放上海還是北京雲主機 發布:2024-10-06 15:43:12 瀏覽:415
日常編程 發布:2024-10-06 15:43:02 瀏覽:327
生產任務量如何配置 發布:2024-10-06 15:40:39 瀏覽:196
java項目分析 發布:2024-10-06 15:35:50 瀏覽:190
靚密碼保健內衣多少錢一套 發布:2024-10-06 15:30:42 瀏覽:175