在現(xiàn)代web開發(fā)中,PHP作為一種常用的服務(wù)器端語言,與數(shù)據(jù)庫之間的交互尤為重要。自從PHP5.1版本開始,PDO(PHP Data Object)被php官方引入,成為一種比原生mysql和mysqli更方便易用的數(shù)據(jù)庫操作方式。而隨著PHP版本的不斷更新,New PDO的出現(xiàn)進一步加強了PDO庫的功能和使用方便性。
相較于傳統(tǒng)的mysql和mysqli方法,PDO更加面向?qū)ο螅影踩梢浦残愿鼜?,能夠與不同類型的數(shù)據(jù)庫進行交互,而且使用相同的方式操作不同的數(shù)據(jù)庫。來看下面的示例:
//使用PDO連接MySQL數(shù)據(jù)庫,并查詢users表中ID為1的用戶信息 $dsn = 'mysql:host=localhost;port=3306;dbname=mydb;charset=utf8'; $username = 'myusername'; $password = 'mypassword'; try{ $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare("SELECT * FROM users WHERE id=?"); $stmt->execute([1]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $result) { echo "{$result['name']} - {$result['email']}
"; } }catch(PDOException $e){ echo "Exception:".$e->getMessage(); }
在這個例子中,PDO的 instantiate 是操作數(shù)據(jù)庫的必要步驟,在PDO中,最重要的內(nèi)容是DSN(通過PHP數(shù)據(jù)源名稱,創(chuàng)建數(shù)據(jù)庫連接),它描述了要連接到的數(shù)據(jù)庫信息的方式。而$stmt實例化等同于mysql_query()函數(shù),是執(zhí)行SQL查詢的基礎(chǔ)方法。
使用New PDO 開始PDO連接更加簡便。比如:
$dsn = "mysql:host={$GLOBALS["DB_HOST"]};dbname={$GLOBALS["DB_NAME"]};charset=utf8mb4"; $options = [ PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES =>false, // debug模式下請開啟 //PDO::ATTR_DEFAULT_FETCH_MODE =>PDO::FETCH_ASSOC, PDO::ATTR_PERSISTENT =>false, ]; try { $pdo = new PDO($dsn, $GLOBALS["DB_USER"], $GLOBALS["DB_PASS"], $options); } catch (PDOException $e) { exit("Could not open database handle" . $e->getMessage()); }
我們也可以在實例化New PDO對象時,多傳入選項parameters,從而自主定義一些額外的選項和設(shè)定。在一個具體的項目中,使用不同的選項參數(shù)創(chuàng)建出不同的實例,從而給數(shù)據(jù)庫操作提供更加靈活的方式。
PHP中New PDO的出現(xiàn),使得我們的服務(wù)器端數(shù)據(jù)庫操作更加靈活、易用、穩(wěn)妥。同時,由于PDO可以與不同類型的數(shù)據(jù)庫進行交互,更加深化了PHP連接不同數(shù)據(jù)源的廣泛適用性,令web開發(fā)向更加多變化和多元化的方向邁進。