:::
4-2 PDO的資料庫連線
- 以下PDO的基本連線方式:
// 建立資料庫連接 $dsn = 'mysql:host=localhost;dbname=your_database;charset=utf8mb4'; $username = 'your_username'; $password = 'your_password'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //連線成功後要做的事 } catch (PDOException $e) { echo "資料庫連接錯誤:" . $e->getMessage(); }最後會得到一個例化的 PDO 物件
$pdo,接著我們就可以用這個物件做任何操作。 - 我們補上兩個設定
$pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); PDO::ATTR_DEFAULT_FETCH_MODE是指定的讀取後,存入陣列的模式,預定常數有PDO::FETCH_ASSOC— 關聯陣列形式,即要讀取 id 值要用$news['id'](最常用,我們指定為這個)PDO::FETCH_NUM— 數字索引陣列形式(一般會搭配list()使用),即要讀取 id 值要用$news[0]PDO::FETCH_BOTH— 兩者陣列形式都有,這是預設值,即要讀取 id 值可用$news['id']或$news[0]PDO::FETCH_OBJ— 按照物件的形式,即要讀取 id 值要用$news->idPDO::FETCH_LAZY—以關聯陣列、數字索引陣列和物件3種形式返回結果 ,即要讀取 id 值可用$news['id']或$news[0]或$news->id
- 另外,關於禁用 prepared statements 的模擬效果目的是加快效能,其緣由可至「PHP 騙你,PDO prepare 並沒有準備好」這篇文章了解詳情
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); - 至於
try...catch...是PHP用來做異常處理用的,可搭配throw new Exception("錯誤訊息");來使用 - 由於 PDO 是物件,只要將實例化的 PDO 物件指向 NULL,即釋放資源
$pdo = NULL; - 最後,為了移植方便,我們將一些設定獨立出來變成這樣(日後會比較好修改)
// 建立PDO連線 $dbname = 'blog'; $host='localhost'; $charset='utf8mb4'; $username = 'root'; $password = '1qazXSW@'; // 建立資料庫連接 $dsn = "mysql:host=$host;dbname=$dbname;charset=$charset"; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //連線成功後要做的事 } catch (PDOException $e) { echo "資料庫連接錯誤:" . $e->getMessage(); } $dsn必須改成雙引號,不然變數會沒作用$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
4-1 接收表單的值