【PHP】pg_query_params関数を使ったクエリ実行方法

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データベースに対してクエリを実行することができます。データベース操作を行う際には、必ずパラメータ化されたクエリを使用して、安全なコードを書くよう心がけましょう。