PHPでPostgreSQLデータベースに対して安全にクエリを実行するためには、pg_query_params関数を使用することが推奨されます。このブログ記事では、pg_query_params関数を使ったクエリ実行方法について、具体的な例を交えながら解説します。
データベース接続の確立
まずは、データベースへの接続を確立します。接続には、pg_connect関数を使用します。
<?php
$conn = pg_connect("host=your_host dbname=your_db user=your_user password=your_password");
if (!$conn) {
die("Connection failed: " . pg_last_error());
}
?>
クエリの準備
次に、pg_query_params関数を使用してクエリを準備します。この関数は、SQLクエリ文字列とパラメータの配列を受け取ります。
<?php
$query = 'SELECT * FROM your_table WHERE column_name = $1';
$params = array('your_value');
$result = pg_query_params($conn, $query, $params);
if (!$result) {
die("Query failed: " . pg_last_error());
}
?>
結果の取得と処理
クエリの実行結果を処理するためには、pg_fetch_assoc関数などを使用して結果セットから行を取得します。
<?php
while ($row = pg_fetch_assoc($result)) {
echo "Column Value: " . $row['column_name'] . "<br>";
}
?>
接続を閉じる
最後に、データベース接続を閉じます。
<?php
pg_free_result($result);
pg_close($conn);
?>
完全なサンプルコード
ここまでの手順をまとめた完全なサンプルコードは以下の通りです。
<?php
// データベースに接続
$conn = pg_connect("host=your_host dbname=your_db user=your_user password=your_password");
if (!$conn) {
die("Connection failed: " . pg_last_error());
}
// クエリの実行
$query = 'SELECT * FROM your_table WHERE column_name = $1';
$params = array('your_value');
$result = pg_query_params($conn, $query, $params);
if (!$result) {
die("Query failed: " . pg_last_error());
}
// 結果の処理
while ($row = pg_fetch_assoc($result)) {
echo "Column Value: " . $row['column_name'] . "<br>";
}
// 接続を閉じる
pg_free_result($result);
pg_close($conn);
?>
注意点
- pg_query_paramsを使用する際には、パラメータとして渡す値がSQLインジェクションの攻撃ベクトルとならないようにするため、自動的に適切にエスケープされます。
- クエリの実行結果が大きい場合、pg_fetch_assocの代わりに他のフェッチ関数(例:pg_fetch_all)を使用して結果を一度に取得することもできます。
まとめ
pg_query_params関数を使用することで、安全かつ効率的にPostgreSQLデータベースに対してクエリを実行することができます。データベース操作を行う際には、必ずパラメータ化されたクエリを使用して、安全なコードを書くよう心がけましょう。