pg_connectとかpg_queryとかあるけど、
DBへの接続はPDOを使うのが一番
です。
PDOならデータベースがMySQLだろうとPostgresqlだろうと設定が変わるだけで使う関数は同じ、何より使ってみるとわかりますが、コードを書く量や修正時の量が少なくて済みます。また、pg_queryだとプレースホルダが使えない場合(本当は使えるのかも知れないけど、回避策が思いつかなかった)があったので、PDOならそこらへんも心配無用。
自分なりの使い方は、
ユーザー入力された値($POST_['value'])はPDO::bindparamで置換する(プレースホルダにバインド)。SQL文はPDO::queryするんじゃなくて、PDO::prepareで文を準備してからexecuteで発行する(プリペアドステートメント)。
PHPマニュアル(PDOstatement::execute)
データベースのユーザー名、パスワードは公開するファイルに直書きするのも心配なので、別ファイルにしてrequireする。この別ファイルを、公開範囲外のディレクトリ(/etcとか)や、公開ディレクトリでもhtaccessでアクセス制限(自分が2度とアクセスできなくならないよう注意)して設置すればセキュリティ上も安心です。
コード例
// 接続先、ユーザー、パスワードの設定
// ./conf/dbconf.phpで保存しているとする
// 3つまとめて一つの文字列変数にしたら、インスタンス生成がうまくできない
// (インスタンス生成時の引数は3つ必要)
$conn_db = 'pgsql:dbname=mydb;host=127.0.0.1;port=5432';
$conn_user = 'user_name';
$conn_pass = 'password';
// ./conf/dbconf.phpで保存しているとする
// 3つまとめて一つの文字列変数にしたら、インスタンス生成がうまくできない
// (インスタンス生成時の引数は3つ必要)
$conn_db = 'pgsql:dbname=mydb;host=127.0.0.1;port=5432';
$conn_user = 'user_name';
$conn_pass = 'password';
// SQLを実行する側のファイル
reqire './conf/dbconf.php'; ←PDOインスタンス生成直前に呼び出し
$pdo = new pdo($conn_db, $conn_user, $conn_pass);
$qstr = "
SELECT
name_field,
my_field1,
my_field2
FROM
myTable
WHERE
name_field
LIKE
:name
ORDER BY
name_field;";
$stmt = $pdo->prepare($qstr); ←SQL文の準備
$name = '%'.$poststr.'%';
←変数にPOSTされた文字列を代入(代入前にサニタイズ、バリデートを適宜行う)
部分一致検索の'%'はSQL文中ではなく変数中に書く
$stmt->bindParam(':name', $name);
←SQL文中のプレースホルダ(:name)に変数nameをバインド
$stmt->execute(); ←クエリ実行
$rows = $stmt->rowCount();
←結果行をカウント(その後のループ処理で必要になる場合が多い)
reqire './conf/dbconf.php'; ←PDOインスタンス生成直前に呼び出し
$pdo = new pdo($conn_db, $conn_user, $conn_pass);
$qstr = "
SELECT
name_field,
my_field1,
my_field2
FROM
myTable
WHERE
name_field
LIKE
:name
ORDER BY
name_field;";
$stmt = $pdo->prepare($qstr); ←SQL文の準備
$name = '%'.$poststr.'%';
←変数にPOSTされた文字列を代入(代入前にサニタイズ、バリデートを適宜行う)
部分一致検索の'%'はSQL文中ではなく変数中に書く
$stmt->bindParam(':name', $name);
←SQL文中のプレースホルダ(:name)に変数nameをバインド
$stmt->execute(); ←クエリ実行
$rows = $stmt->rowCount();
←結果行をカウント(その後のループ処理で必要になる場合が多い)
セキュリティも含め以下のサイトが非常に参考になります。
PHPでデータベースに接続するときのまとめ
最後にPDOからは外れますが、データを入力送信するタイプのサイトを公開すると、色々なIPから暗号のような長文をPOSTしてくる輩(PHP脆弱性攻撃)がいますので、Cookieのセッションやリファラなどの文字列IDを使って意図したページからのみのPOSTを受け付けるようにします(CSRF対策)。それはまた別の記事で・・・
![](https://stat100.ameba.jp/blog/ucs/img/char/char2/178.gif)