1、什么是PDO?
php data object ,php數據對象,PHP 數據對象 (PDO) 擴展為PHP操作多種數據庫定義了一個輕量級的一致接口。實現 PDO 接口的每個數據庫驅動可以公開具體數據庫的特性作為標准擴展功能。 注意利用 PDO 擴展自身並不能實現任何數據庫功能;必須使用一個 具體數據庫的 PDO 驅動 來訪問數據庫服務。
PDO 提供了一個 數據訪問 抽象層,這意味着,不管使用哪種數據庫,都可以用相同的函數(方法)來查詢和獲取數據。 PDO 不提供 數據庫 抽象層;它不會重寫 SQL,也不會模擬缺失的特性。如果需要的話,應該使用一個成熟的抽象層。
2、為什么要使用PDO?
更換其他數據庫的時候無需更換代碼,提高了程序運行效率
3、PDO的特點是什么?
(1)、編碼的一致性
(2)、靈活性
(3)、面向對象特性
(4)、高性能
使用PDO的好處是:從根本上防止SQL注入
4、如何使用PDO?
修改 php.ini中的配置 添加MYSQL的PDO擴展
(1) extension=php_pdo_mysql.dll 去前面的分號
(2) 擴展目錄中要有相應的擴展文件
(3) PDO連接不同的數據庫,要有不同的數據庫驅動文件即我們所加入配置文件的擴展
(4) 重新啟動Apache使配置生效
或者在PHPstudy中設置如下:
5、使用PDO的基本格式
(1) 格式
$host = "127.0.0.1"; // MySQL所在的服務器的IP $port = "3306"; // MySQL的端口 $username= "root"; //數據庫賬號 $password = "123456"; //數據庫密碼 $dbname = "test"; // 數據庫名稱 $charset = "utf8"; // 編碼集 $dsn = "mysql:dbname=$dbname;host=$host"; // $dsn =“數據庫類型:dbname=數據庫名;host=數據庫的域名”;
備注: dsn: data sourse name數據的來源 ->要找的數據庫是哪台電腦哪個數據庫
(2) 聲明對象:
$object = new PDO($dsn,$user,$password);
6、案例:
$host = "127.0.0.1"; $port = "3306"; // $username = "root"; $password = "asdf1234"; $dbname = "tperp"; $charset = "utf8"; $dsn = "mysql:dbname=$dbname;host=$host"; try{ $pdo = new Pdo($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 設置sql語句查詢如果出現問題 就會拋出異常 set_exception_handler("cus_exception_handler"); } catch(PDOException $e){ die("連接失敗: ".$e->getMessage()); } function cus_exception_handler($e) { die("sql 異常: ".$e->getMessage()); } //查詢數據 $state = $pdo->query("select * from admin_user where id = 1"); // query執行一條SQL語句,如果通過,則返回一個PDOStatement對象,可以直接遍歷這個返回的記錄集 (query用於select) $res = $state->fetch(PDO::FETCH_ASSOC); // 獲取結果集中的一行數據 $res = $state->fetchAll(PDO::FETCH_ASSOC); //獲取結果集中的所有數據 //添加數據 $row1 = $pdo->exec("insert into admin_user(user_name, password) values('jack', 'adsfadf')"); // exec主要執行沒有返回結果集的操作 PDO::exec執行一條SQL語句,並返回受影響的行數。此函數不會返回結果集合.。 (exec用於insert、delete、update) //修改數據 $row2 = $pdo->exec("update admin_user set user_name = 'peter' where user_id = 50"); //刪除數據 $row3 = $pdo->exec("delete from admin_user where user_id = 50"); var_dump($res,$row1,$row2,$row3);
預處理(防止SQL注入)
$state = $pdo->prepare("select * from tp_admin_user where user_id = ?"); $state->execute([49]); $row = $state->fetch(PDO::FETCH_ASSOC); // 獲取結果集中的一條 $rows = $state->fetchAll(PDO::FETCH_ASSOC); // 獲取結果集中的所有 echo "<pre>"; var_dump($rows);