PostgreSQL 中使用 PHP 处理图像,我们将使用图像文件。 有些人不同意将图像放入数据库。 在这里,我们只展示如何做。 我们不讨论是否将图像保存在数据库中的技术问题。
testdb=> CREATE TABLE images(id INT PRIMARY KEY, data BYTEA);
对于此示例,我们创建一个名为 images 的新表。 对于图像,我们使用BYTEA
数据类型。 它允许存储二进制字符串。
插入图像
在第一个示例中,我们将图像插入 PostgreSQL 数据库。
<?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");file_name = "woman.jpg";
img = fopen(file_name, 'r') or die("cannot read image\n");
data = fread(img, filesize(file_name));es_data = pg_escape_bytea(data);
fclose(img);
query = "INSERT INTO images(id, data) Values(1, 'es_data')";
pg_query(con,query);
pg_close($con);
?>
我们从当前工作目录中读取图像,并将其写入 PostgreSQL testdb
数据库的图像表中。
$file_name = "woman.jpg";
这是我们将插入数据库的图像文件的名称。 该图像位于当前工作目录中。
$img = fopen($file_name, 'r') or die("cannot read image\n");
$data = fread($img, filesize($file_name));
我们从文件系统读取二进制数据。
$es_data = pg_escape_bytea($data);
二进制数据可能包含一些字符,这些字符可能在将它们插入数据库表时引起问题。 pg_escape_bytea()
函数对要插入到bytea field
中的字符串进行转义。 以后,当从数据库中读取二进制数据时,必须对数据进行转义。
fclose($img);
指向图像文件的句柄已关闭。
$query = "INSERT INTO images(id, data) Values(1, '$es_data')";
pg_query($con, $query);
图像已插入数据库。
读取图像
在本节中,我们将执行相反的操作。 我们将从数据库表中读取图像。
<?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 data FROM images WHERE id=1";
res = pg_query(con, query) or die (pg_last_error(con));
data = pg_fetch_result(res, 'data');
unes_image = pg_unescape_bytea(data);
file_name = "woman2.jpg";img = fopen(file_name, 'wb') or die("cannot open image\n");
fwrite(img, unes_image) or die("cannot write image data\n");
fclose(img);
pg_close($con);
?>
我们从图像表中读取图像数据并将其写入另一个文件,我们称为woman2.jpg
。
$query = "SELECT data FROM images WHERE id=1";
这行是一条 SQL SELECT
语句,用于从表中检索图像数据。
$data = pg_fetch_result($res, 'data');
我们从images
表的 data 列中获取数据。
$unes_image = pg_unescape_bytea($data);
当我们将图像数据插入数据库时,我们对其进行了转义。 现在我们必须将其转义回原始状态。
$file_name = "woman2.jpg";
$img = fopen($file_name, 'wb') or die("cannot open image\n");
我们打开一个文件进行写入。 新文件名将为woman2.jpg
。
fwrite(img,unes_image) or die("cannot write image data\n");
数据被写入文件系统。
PostgreSQL PHP 教程的这一部分专门用于读取和写入图像。