ZetCode

使用 PHP 在 PostgreSQL 中检索数据

最后修改于 2020 年 7 月 6 日

有几个函数可以从数据库中读取数据。数据可以作为枚举数组、对象或关联数组获取。

从数据库中检索数据有三个步骤。首先,我们定义一个 SQL SELECT 语句。该语句使用 pg_query 函数执行。(如果是预处理语句,我们将使用 pg_execute 函数。)我们收到一个结果集对象。使用结果集,我们使用 pg_fetch_rowpg_fetch_assocpg_fetch_object 函数获取数据。

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n"); 

$query = "SELECT * FROM cars LIMIT 5"; 

$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");

while ($row = pg_fetch_row($rs)) {
  echo "$row[0] $row[1] $row[2]\n";
}

pg_close($con); 

?>

我们从 cars 表中获取 5 辆汽车,并将它们打印到控制台。

$query = "SELECT * FROM cars LIMIT 5";

这是获取 5 行汽车的 SQL。

$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");

查询使用 pg_query 函数执行。该函数返回一个结果集。

while ($row = pg_fetch_row($rs)) {
  echo "$row[0] $row[1] $row[2]\n";
}

pg_fetch_row 函数返回一个字符串值数组。我们可以使用数组索引表示法来获取数组字段。当没有更多行时,该函数返回 false,while 循环终止。

$ php retrieve1.php
1 Audi 52642
2 Mercedes 57127
3 Skoda 9000
4 Volvo 29000
5 Bentley 350000

示例输出。

在第二个例子中,我们将使用 pg_fetch_assoc 函数获取数据。

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die ("Could not connect to server\n"); 

$query = "SELECT * FROM cars LIMIT 5"; 

$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");

while ($row = pg_fetch_assoc($rs)) {
    echo $row['id'] . " " . $row['name'] . " " . $row['price'];
    echo "\n";
}

pg_close($con);

?>

pg_fetch_assoc 函数将一行作为关联数组获取。关联数组的键是列名。

while ($row = pg_fetch_assoc($rs)) {
    echo $row['id'] . " " . $row['name'] . " " . $row['price'];
    echo "\n";
}

idnameprice 是返回的关联数组的键。

在最后一个例子中,我们将使用 pg_fetch_object 函数获取数据。它返回一个对象,其属性对应于获取的行的字段名称。

<?php 

$host = "localhost"; 
$user = "user12"; 
$pass = "34klq*"; 
$db = "testdb"; 

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
    or die("Could not connect to server\n"); 

$query = "SELECT * FROM cars LIMIT 5"; 

$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");

while ($ro = pg_fetch_object($rs)) {
    echo $ro->id . " ";
    echo $ro->name . " ";
    echo $ro->price . " ";
    echo "\n";
}

pg_close($con); 

?>

我们从 cars 表中选择五辆汽车。

while ($ro = pg_fetch_object($rs)) {
    echo $ro->id . " ";
    echo $ro->name . " ";
    echo $ro->price . " ";
    echo "\n";
}

列名是对象属性,它们保存着值。

我们已经使用 pg_fetch_rowpg_fetch_assocpg_fetch_object 函数完成了读取数据。