###### tags: `php` `blog` `postgresql`
# 使用 PDO 連上 postgresql
PDO 可以幫助我們連線到資料庫,像是 mysql 跟 postgresql ,除此之外還可以使用 prepare 的語法,幫我們做檢查,以防 sql injection 的攻擊。
建議現在 php 操作資料庫使用 pdo ,不要再使用 mysql 跟 mysqli 這類的函數
## 環境
### 開啟 extension
在 php.ini 中找到 extension=pdo_pgsql 並把他取消註解
```
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop
```
## 連線
```php=
try {
$pgConn = new PDO("pgsql:host=$host;port=$port;dbname=$dbname;", $user, $password);
} catch (PDOException $e) {
echo 'Database connection fails: ' . $e->getMessage() . '<br />';
exit;
}
```
## 操作
我們可以使用一般的 query 跟 prepare 兩種方法來做使用,如果牽扯到變數,建議使用 prepare
### Query
```php=
// show database name
$res = $pgConn->query("SELECT datname FROM pg_database;");
print_r($res->fetchAll());
```
### Prepare
```php=
// show database name
$datname = "postgres";
$stmt = $pgConn->prepare("SELECT datname FROM pg_database where datname = :datname;");
$stmt->bindParam(":datname", $datname);
$stmt->execute();
print_r($stmt->fetchAll());
```
## Reference
[PostgreSQL Tutorial](https://www.postgresqltutorial.com/)