接了个不算单子的单子,要写pgsql的简单操作页面。
3个文件。
一个pgsql类,一个common,一个页面。
实现连接pgsql数据库,执行语句,返回执行结果。
common。php
一个数组过滤函数
function addslashes_deep($value)
{
if (empty($value))
{
return $value;
}
else
{
return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
}
}
pgsql连接类
<?php
/*
* Create 2010-04-23
* Author king-of-war
*/
class PostgreSQL {
var $dbhost = 'localhost';
var $dbuser = 'postgres';
var $dbpw = 'liujie';
var $dbname = '';
var $dbport = 5432;
var $pconnect = 1; //是否持久连接
var $querynum = 0;
var $dbconnect;
//初始化
function PostgreSQL($dbhost,$dbuser,$dbpw,$dbname,$dbport,$pconnect=1) {
if($dbhost)
$this->dbhost=$dbhost;
if($dbuser)
$this->dbuser=$dbuser;
if($dbpw)
$this->dbpw=$dbpw;
if($dbname)
$this->dbname=$dbname;
if($dbport)
$this->dbport=$dbport;
$this->pconnect = $pconnect;
$this->connect();
}
//连接函数,返回一个连接
function connect() {
$connect = "host=".$this->dbhost." port=".$this->dbport." dbname=".$this->dbname." user=".$this->dbuser;
if (!empty($this->dbpw))
$connect.=" password=".$this->dbpw;
if ($this->pconnect)
$this->dbconnect=pg_pconnect($connect);
else
$this->dbconnect=pg_connect($connect);
if (!$this->dbconnect)
$this->halt("Cannot connect to database");
}
//执行,返回result
function query($sql, $silence = 0) {
$result = pg_query($this->dbconnect, $sql);
if(!$result && !$silence) {
$this->halt('PgSQL Query Error', $sql);
}
$this->querynum++;
return $result;
}
// 执行语句,返回首行
function & query_first($sql, $result_type = PGSQL_ASSOC) {
$result = $this->query($sql);
$returnarray=pg_fetch_array($result, 0, $result_type);
$this->free_result($result);
return $returnarray;
}
//执行语句,返回所有行
function & query_all($sql, $result_type = PGSQL_ASSOC) {
$result = $this->query($sql);
$returnarray = (function_exists("pg_fetch_all"))
? pg_fetch_all($result)
: $this->fetch_all($result, $result_type);
$this->free_result($result);
return $returnarray;
}
//fetch方式
function fetch_array($result, $row, $result_type = PGSQL_ASSOC) {
return pg_fetch_array($result, $row, $result_type);
}
function fetch_all($result) {
while ($row = pg_fetch_assoc($result)) {
$array_out[] = $row;
}
return $array_out;
}
function affected_rows() {
return pg_affected_rows();
}
function error() {
return pg_last_error();
}
function num_rows(&$query) {
return pg_num_rows($query);
}
function num_fields(&$query) {
return pg_num_rows($query);
}
function free_result(&$query) {
return pg_free_result($query);
}
function fetch_row(&$query) {
return pg_fetch_row($query);
}
function close() {
if (!$this->pconnect)
return pg_close();
}
//关闭连接
function halt($message = '', $sql = '') {
$timestamp = time();
$errmsg = '';
$dberror = $this->error();
if($message) {
$errmsg = "<b>info</b>: $message/n/n";
}
$errmsg .= "<b>Time</b>: ".gmdate("Y-n-j g:ia", $timestamp)."/n";
$errmsg .= "<b>Script</b>: ".$_SERVER['PHP_SELF']."/n/n";
$errmsg = nl2br($errmsg);
if($sql) {
$errmsg .= "<!--/n/nSQL: $sql/n";
}
$errmsg .= "Error: $dberror/n/n-->";
echo "<p>$errmsg</p>";
exit;
}
}
?>