代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PHP
】
PostgreSQL DB 简单操作类
作者:
小兄弟
/ 发布于
2012/11/19
/
644
<?php /** * iPHP - i PHP Framework * Copyright (c) 2012 iiiphp.com. All rights reserved. * * @author coolmoo <iiiphp@qq.com> * @site http://www.iiiphp.com * @licence http://www.iiiphp.com/license * @version 1.0.1 * @package iDB * @$Id: iPgsql.class.php 44 2012-03-30 04:02:10Z coolmoo $ */ define('DB_PORT', 5432); define('OBJECT', 'OBJECT', true); define('ARRAY_A', 'ARRAY_A', false); define('ARRAY_N', 'ARRAY_N', false); defined('SAVEQUERIES') OR define('SAVEQUERIES', true); class iDB{ public static $show_errors = false; public static $num_queries = 0; public static $last_query; public static $col_info; public static $queries; public static $func_call; public static $last_result; public static $num_rows; public static $insert_id; private static $collate; private static $time_start; private static $last_error ; private static $dbh; private static $result; function __construct() { if (!self::$dbh) self::connect(); } function connect() { extension_loaded('pgsql') OR die('您的 PHP 安装看起来缺少 PostgreSQL 数据库部分,这对 iPHP 来说是必须的。'); defined('DB_COLLATE') && self::$collate = DB_COLLATE; self::$dbh = pg_connect("host=".DB_HOST." port=".DB_PORT." dbname=".DB_NAME." user=".DB_USER." password=".DB_PASSWORD); defined('DB_CHARSET') && self::query("set client_encoding to '".DB_CHARSET."'"); self::$dbh OR self::bail("<h1>数据库链接失败</h1>请检查 <em><strong>config.php</strong></em> 的配置是否正确!<ul><li>请确认主机支持PostgreSQL?</li><li>请确认用户名和密码正确?</li><li>请确认主机名正确?(一般为localhost)</li></ul>如果你不确定这些情况,请询问你的主机提供商.如果你还需要帮助你可以随时浏览 <a href='http://www.iiiphp.com'>iPHP 支持论坛</a>."); //@mysql_select_db(DB_NAME, self::$dbh) OR self::bail("<h1>链接到<em><strong>".DB_NAME."</strong></em>数据库失败</h1>我们能连接到数据库服务器(即数据库用户名和密码正确) ,但是不能链接到<em><strong>$db</strong></em>数据库.<ul><li>你确定<em><strong>$db</strong></em>存在?</li></ul>如果你不确定这些情况,请询问你的主机提供商.如果你还需要帮助你可以随时浏览 <a href='http://www.iiiphp.com'>iPHP 支持论坛</a>."); } // ================================================================== // Print SQL/DB error. function print_error($str = '') { if (!$str) $str = pg_result_error(self::$dbh); $EZSQL_ERROR[] = array ('query' => self::$last_query, 'error_str' => $str); $str = htmlspecialchars($str, ENT_QUOTES); $query = htmlspecialchars(self::$last_query, ENT_QUOTES); // Is error output turned on or not.. if ( self::$show_errors ) { // If there is an error then take note of it die("<div id='error'> <p class='iPHPDBerror'><strong>iPHP database error:</strong> [$str] $query </div>"); } else { return false; } } // ================================================================== // Kill cached query results function flush() { self::$last_result = array(); self::$col_info = null; self::$last_query = null; } // ================================================================== // Basic Query - see docs for more detail function query($query,$QT=NULL) { if (!self::$dbh) { self::connect(); } // filter the query, if filters are available // NOTE: some queries are made before the plugins have been loaded, and thus cannot be filtered with this method $query=str_replace(DB_PREFIX_TAG,DB_PREFIX, $query); // initialise return $return_val = 0; self::flush(); // Log how the function was called self::$func_call = __CLASS__."::query(\"$query\")"; // Keep track of the last query for debug.. self::$last_query = $query; // Perform the query via std pgsql_query function.. if (SAVEQUERIES) self::timer_start(); self::$result = pg_query(self::$dbh,$query); self::$num_queries++; if (SAVEQUERIES) self::$queries[] = array( $query, self::timer_stop()); // If there is an error then take note of it.. if ( self::$last_error = pg_result_error(self::$result) ) { self::print_error(); return false; } $QH = strtoupper(substr($query,0,strpos($query, ' '))); if (in_array($QH,array("INSERT","DELETE","UPDATE","REPLACE"))) { $rows_affected = pg_affected_rows (self::$result); // Take note of the insert_id if (in_array($QH,array("INSERT","REPLACE"))) { self::$insert_id = pg_last_oid(self::$result); } // Return number of rows affected $return_val = $rows_affected; } else { if($QT=="field") { $i = 0; while ($i < pg_num_fields(self::$result)) { self::$col_info[$i] = pg_field_name(self::$result); $i++; } }else { $num_rows = 0; while ( $row = pg_fetch_object(self::$result) ) { self::$last_result[$num_rows] = $row; $num_rows++; } // Log number of rows the query returned self::$num_rows = $num_rows; // Return number of rows selected $return_val = $num_rows; } pg_free_result(self::$result); } return $return_val; } /** * Insert an array of data into a table * @param string $table WARNING: not sanitized! * @param array $data should not already be SQL-escaped * @return mixed results of self::query() */ function insert($table, $data) { // $data = add_magic_quotes($data); $fields = array_keys($data); return self::query("INSERT INTO ".DB_PREFIX_TAG."{$table} (`" . implode('`,`',$fields) . "`) VALUES ('".implode("','",$data)."')"); } /** * Update a row in the table with an array of data * @param string $table WARNING: not sanitized! * @param array $data should not already be SQL-escaped * @param array $where a named array of WHERE column => value relationships. Multiple member pairs will be joined with ANDs. WARNING: the column names are not currently sanitized! * @return mixed results of self::query() */ function update($table, $data, $where) { // $data = add_magic_quotes($data); $bits = $wheres = array(); foreach ( array_keys($data) as $k ) $bits[] = "`$k` = '$data[$k]'"; if ( is_array( $where ) ) foreach ( $where as $c => $v ) $wheres[] = "$c = '" . addslashes( $v ) . "'"; else return false; return self::query("UPDATE ".DB_PREFIX_TAG."{$table} SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres ) . ' LIMIT 1' ); } /** * Get one variable from the database * @param string $query (can be null as well, for caching, see codex) * @param int $x = 0 row num to return * @param int $y = 0 col num to return * @return mixed results */ function getValue($query=null, $x = 0, $y = 0) { self::$func_call = __CLASS__."::getValue(\"$query\",$x,$y)"; if ( $query ) self::query($query); // Extract var out of cached results based x,y vals if ( !empty( self::$last_result[$y] ) ) { $values = array_values(get_object_vars(self::$last_result[$y])); } // If there is a value return it else return null return (isset($values[$x]) && $values[$x]!=='') ? $values[$x] : null; } /** * Get one row from the database * @param string $query * @param string $output ARRAY_A | ARRAY_N | OBJECT * @param int $y row num to return * @return mixed results */ function getRow($query = null, $output = OBJECT, $y = 0) { self::$func_call = __CLASS__."::getRow(\"$query\",$output,$y)"; if ( $query ) self::query($query); if ( !isset(self::$last_result[$y]) ) return null; if ( $output == OBJECT ) { return self::$last_result[$y] ? self::$last_result[$y] : null; } elseif ( $output == ARRAY_A ) { return self::$last_result[$y] ? get_object_vars(self::$last_result[$y]) : null; } elseif ( $output == ARRAY_N ) { return self::$last_result[$y] ? array_values(get_object_vars(self::$last_result[$y])) : null; } else { self::print_error(__CLASS__."::getRow(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"); } } /** * Return an entire result set from the database * @param string $query (can also be null to pull from the cache) * @param string $output ARRAY_A | ARRAY_N | OBJECT * @return mixed results */ function getArray($query = null, $output = ARRAY_A) { self::$func_call = __CLASS__."::getArray(\"$query\", $output)"; if ( $query ) self::query($query); // Send back array of objects. Each row is an object if ( $output == OBJECT ) { return self::$last_result; } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { if ( self::$last_result ) { $i = 0; foreach( (array) self::$last_result as $row ) { if ( $output == ARRAY_N ) { // ...integer-keyed row arrays $new_array[$i] = array_values( get_object_vars( $row ) ); } else { // ...column name-keyed row arrays $new_array[$i] = get_object_vars( $row ); } ++$i; } return $new_array; } else { return null; } } } /** * Gets one column from the database * @param string $query (can be null as well, for caching, see codex) * @param int $x col num to return * @return array results */ function getCol($query = null , $x = 0) { if ( $query ) self::query($query); $new_array = array(); // Extract the column values for ( $i=0; $i < count(self::$last_result); $i++ ) { $new_array[$i] = self::getValue(null, $x, $i); } return $new_array; } /** * Grabs column metadata from the last query * @param string $info_type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill * @param int $col_offset 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type * @return mixed results */ function get_col_info($query = null ,$info_type = 'name', $col_offset = -1) { if ( $query ) self::query($query,"field"); if ( self::$col_info ) { if ( $col_offset == -1 ) { $i = 0; foreach(self::$col_info as $col ) { $new_array[$i] = $col->{$info_type}; $i++; } return $new_array; } else { return self::$col_info[$col_offset]->{$info_type}; } } } function version() { // Make sure the server has PostgreSQL 4.0 $v = pg_version(self::$dbh); return $v['client']; } /** * Starts the timer, for debugging purposes */ function timer_start() { $mtime = microtime(); $mtime = explode(' ', $mtime); self::$time_start = $mtime[1] + $mtime[0]; return true; } /** * Stops the debugging timer * @return int total time spent on the query, in milliseconds */ function timer_stop() { $mtime = microtime(); $mtime = explode(' ', $mtime); $time_end = $mtime[1] + $mtime[0]; $time_total = $time_end - self::$time_start; return $time_total; } /** * Wraps fatal errors in a nice header and footer and dies. * @param string $message */ function bail($message){ // Just wraps errors in a nice header and footer if ( !self::$show_errors ) { return false; } header('Content-Type: text/html; charset=utf8'); echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>iPHP PostgreSQL Error</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><h1 id="logo"><img alt="iPHP" src="http://www.iiiphp.com/doc/iPHP.logo.gif" /></h1>'.$message.'</body></html>'; exit(); } }
试试其它关键字
PostgreSQL
DB
同语言下
.
用net匹配并替换iOS标准的emoji表情符号
.
处理带Emoji表情的的字符串
.
获取微信昵称时 过滤特殊字符
.
通过判断上传文件的头字符来判断文件的类型
.
模拟百度URL加密解密算法
.
以太坊检查地址是否合法
.
实现crontab解析类
.
获取每个月的开始和结束时间
.
图片上传工具类
.
APP手机应用信息采集
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
小兄弟
贡献的其它代码
(
1
)
.
PostgreSQL DB 简单操作类
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3