自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP PDO簡單教程

開發(fā) 后端
雖然 mysqli 庫是官方指定的,但由于 mysqli 只能支持 mysql 數(shù)據(jù)庫,而 PDO 可以支持 12 種不同類型的數(shù)據(jù)庫驅(qū)動程序,因此 PDO 獲得了更多的贊譽。此外,PDO 還有其它一些特性,使其成為大多數(shù)開發(fā)人員的更好選擇。

PHP PDO簡單教程

大約 80% 的 Web 應(yīng)用程序由 PHP 提供支持。類似地,SQL 也是如此。PHP 5.5 版本之前,我們有用于訪問 MySQL 數(shù)據(jù)庫的 mysql_ 命令,但由于安全性不足,它們最終被棄用。

棄用這件事是發(fā)生在 2013 年的 PHP 5.5 上,我寫這篇文章的時間是 2018 年,PHP 版本為 7.2。mysql_ 的棄用帶來了訪問數(shù)據(jù)庫的兩種主要方法:mysqli 和 PDO 庫。

雖然 mysqli 庫是官方指定的,但由于 mysqli 只能支持 mysql 數(shù)據(jù)庫,而 PDO 可以支持 12 種不同類型的數(shù)據(jù)庫驅(qū)動程序,因此 PDO 獲得了更多的贊譽。此外,PDO 還有其它一些特性,使其成為大多數(shù)開發(fā)人員的更好選擇。你可以在下表中看到一些特性比較:

  PDO MySQLi
數(shù)據(jù)庫支持 12 種驅(qū)動 只有 MySQL
范例 OOP 過程 + OOP
預處理語句(客戶端側(cè)) Yes No
1命名參數(shù) Yes No

現(xiàn)在我想對于大多數(shù)開發(fā)人員來說,PDO 是***的原因已經(jīng)很清楚了。所以讓我們深入研究它,并希望在本文中盡量涵蓋關(guān)于 PDO 你需要的了解的。

連接

***步是連接到數(shù)據(jù)庫,由于 PDO 是完全面向?qū)ο蟮?,所以我們將使?PDO 類的實例。

我們要做的***件事是定義主機、數(shù)據(jù)庫名稱、用戶名、密碼和數(shù)據(jù)庫字符集。

  1. $host = 'localhost';
  2. $db = 'theitstuff';
  3. $user = 'root';
  4. $pass = 'root';
  5. $charset = 'utf8mb4';
  6. $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
  7. $conn = new PDO($dsn, $user, $pass);

之后,正如你在上面的代碼中看到的,我們創(chuàng)建了 DSN 變量,DSN 變量只是一個保存數(shù)據(jù)庫信息的變量。對于一些在外部服務(wù)器上運行 MySQL 的人,你還可以通過提供一個 port=$port_number 來調(diào)整端口號。

***,你可以創(chuàng)建一個 PDO 類的實例,我使用了 $conn 變量,并提供了 $dsn$user、$pass 參數(shù)。如果你遵循這些步驟,你現(xiàn)在應(yīng)該有一個名為 $conn 的對象,它是 PDO 連接類的一個實例?,F(xiàn)在是時候進入數(shù)據(jù)庫并運行一些查詢。

一個簡單的 SQL 查詢

現(xiàn)在讓我們運行一個簡單的 SQL 查詢。

  1. $tis = $conn->query('SELECT name, age FROM students');
  2. while ($row = $tis->fetch())
  3. {
  4. echo $row['name']."\t";
  5. echo $row['age'];
  6. echo "<br>";
  7. }

這是使用 PDO 運行查詢的最簡單形式。我們首先創(chuàng)建了一個名為 tis(TheITStuff 的縮寫 )的變量,然后你可以看到我們使用了創(chuàng)建的 $conn 對象中的查詢函數(shù)。

然后我們運行一個 while 循環(huán)并創(chuàng)建了一個 $row 變量來從 $tis 對象中獲取內(nèi)容,***通過調(diào)用列名來顯示每一行。

很簡單,不是嗎?現(xiàn)在讓我們來看看預處理語句。

預處理語句

預處理語句是人們開始使用 PDO 的主要原因之一,因為它提供了可以阻止 SQL 注入的語句。

有兩種基本方法可供使用,你可以使用位置參數(shù)或命名參數(shù)。

位置參數(shù)

讓我們看一個使用位置參數(shù)的查詢示例。

  1. $tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)");
  2. $tis->bindValue(1,'mike');
  3. $tis->bindValue(2,22);
  4. $tis->execute();

在上面的例子中,我們放置了兩個問號,然后使用 bindValue() 函數(shù)將值映射到查詢中。這些值綁定到語句問號中的位置。

我還可以使用變量而不是直接提供值,通過使用 bindParam() 函數(shù)相同例子如下:

  1. $name='Rishabh'; $age=20;
  2. $tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)");
  3. $tis->bindParam(1,$name);
  4. $tis->bindParam(2,$age);
  5. $tis->execute();

命名參數(shù)

命名參數(shù)也是預處理語句,它將值/變量映射到查詢中的命名位置。由于沒有位置綁定,因此在多次使用相同變量的查詢中非常有效。

  1. $name='Rishabh'; $age=20;
  2. $tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(:name, :age)");
  3. $tis->bindParam(':name', $name);
  4. $tis->bindParam(':age', $age);
  5. $tis->execute();

你可以注意到,唯一的變化是我使用 :name:age 作為占位符,然后將變量映射到它們。冒號在參數(shù)之前使用,讓 PDO 知道該位置是一個變量,這非常重要。

你也可以類似地使用 bindValue() 來使用命名參數(shù)直接映射值。

獲取數(shù)據(jù)

PDO 在獲取數(shù)據(jù)時非常豐富,它實際上提供了許多格式來從數(shù)據(jù)庫中獲取數(shù)據(jù)。

你可以使用 PDO::FETCH_ASSOC 來獲取關(guān)聯(lián)數(shù)組,PDO::FETCH_NUM 來獲取數(shù)字數(shù)組,使用 PDO::FETCH_OBJ 來獲取對象數(shù)組。

  1. $tis = $conn->prepare("SELECT * FROM STUDENTS");
  2. $tis->execute();
  3. $result = $tis->fetchAll(PDO::FETCH_ASSOC);

你可以看到我使用了 fetchAll,因為我想要所有匹配的記錄。如果只需要一行,你可以簡單地使用 fetch。

現(xiàn)在我們已經(jīng)獲取了數(shù)據(jù),現(xiàn)在是時候循環(huán)它了,這非常簡單。

  1. foreach ($result as $lnu){
  2. echo $lnu['name'];
  3. echo $lnu['age']."<br>";
  4. }

你可以看到,因為我請求了關(guān)聯(lián)數(shù)組,所以我正在按名稱訪問各個成員。

雖然在定義希望如何傳輸遞數(shù)據(jù)方面沒有要求,但在定義 $conn 變量本身時,實際上可以將其設(shè)置為默認值。

你需要做的就是創(chuàng)建一個 $options 數(shù)組,你可以在其中放入所有默認配置,只需在 $conn 變量中傳遞數(shù)組即可。

  1. $options = [
  2. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  3. ];
  4. $conn = new PDO($dsn, $user, $pass, $options);

這是一個非常簡短和快速的 PDO 介紹,我們很快就會制作一個高級教程。如果你在理解本教程的任何部分時遇到任何困難,請在評論部分告訴我,我會在那你為你解答。 

責任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2009-11-18 15:49:04

PHP PDO

2009-12-08 17:23:12

PHP PDO類

2011-08-05 10:01:47

MySQL庫Pdo-MysqlMysqli

2011-07-11 10:00:34

PHP緩存技術(shù)

2011-05-30 10:46:40

PHP

2014-04-24 13:35:11

OpenGL ES2.iOSAndroid

2009-11-30 16:52:19

PHP簡單程序范例

2009-12-07 12:56:40

PHP文件管理

2011-07-07 13:48:35

Smarty

2009-11-30 18:34:22

PHP簡單語法

2011-08-30 15:32:08

QtQuickQML

2009-07-06 14:43:30

JSP元素

2009-11-18 16:58:55

PHP命名規(guī)則

2015-06-11 10:57:10

2009-11-17 09:02:36

PHP數(shù)組賦值

2012-06-13 13:37:49

PHP

2009-11-24 17:01:39

PHP5多重繼承

2010-03-11 16:22:08

Python教程

2014-07-17 11:36:27

Android Stu使用教程

2009-06-24 10:58:21

jQuery插件教程
點贊
收藏

51CTO技術(shù)棧公眾號