PHP Postgres DBアクセス
●接続
<?php // ネイティブ $db = pg_connect('host=hoge port=5432 dbname=hoge user=hoge password=hoge'); // PDO $db = new PDO('pgsql:host=localhost;port=5432;dbname=hoge;user=hoge;password=hoge'); //※こっちでもよい? $db = new PDO('pgsql:host=localhost;port=5432;dbname=hoge', 'hoge', 'hoge');
<?php // ネイティブ // クオートはしない $sql = "SELECT * FROM hoge WHERE id = '". pg_escape_string($hoge_id)."'"; // クオートもするみたい (バージョン情報なし。おそらく SVN 版にしか存在しないでしょう) $sql = 'SELECT * FROM hoge WHERE id = '. pg_escape_literal($hoge_id); // PDO $sql = 'SELECT * FROM hoge WHERE id = '. $db->quote($hoge_id);
●SQL実行
<?php // ネイティブ $rs = pg_query($db, $sql); // PDO $sth = $db->query($sql);
●プリペアードクエリの実行
<?php // ネイティブ $sql = 'SELECT * FROM hoge WHERE id = $1'; $rs = pg_prepare($db, 'query1', $sql); $rs = pg_execute($db, 'query1', array($hoge_id)); // PDO $sql = 'SELECT * FROM hoge WHERE id = ?'; $sth = $db->prepare($sql); $sth->execute(array($hoge_id)); // PDO プレースホルダに疑問符でなく名前 名前=>値の連祖配列を execute に渡す $sql = 'SELECT * FROM hoge WHERE id = :id'; $sth = $db->prepare($sql); $sth->execute(array(':id' => $hoge_id)); // PDO 名前付きパラメータ bindParam 使用 $sql = 'SELECT * FROM hoge WHERE id = :id'; $sth = $db->prepare($sql); $sth->bindParam(':id', $hoge_id, PDO::PARAM_INT); $sth->execute();
PDO::prepare
PDOStatement::execute
PDOStatement::bindParam
PDO 定義済み定数
●結果行を取得
<?php // ネイティブ while($row = pg_fetch_assoc($rs)){ print_r($row); } // PDO while($row = $sth->fetch(PDO::FETCH_ASSOC)){ print_r($row); }
●結果行すべてを配列として取得
<?php // ネイティブ $rows = pg_fetch_all($rs); // PDO $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
●切断
<?php // ネイティブ ※1 pg_close($db); // PDO ※2 $db = null;
※1「持続的でない接続はスクリプトの実行終了時に自動的にクローズされるため、 pg_close() は通常は必要ありません。」
※2 「明示的にこれを行わなかった場合は、スクリプトの終了時に自動的に 接続が閉じられます。」
<?php // ネイティブ pg_query($db, 'BEGIN'); pg_query($db, 'ROLLBACK'); pg_query($db, 'COMMIT'); // PDO $db->beginTransaction(); $db->rollback(); $db->commit();
PDOリンク
接続、および接続の管理
トランザクションおよび自動コミット
プリペアドステートメントおよびストアドプロシージャ
エラーおよびエラー処理