
正文
php通用数据库类 php数据库类库
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何使用PHP编程说明
PHP是一门高效的网络编程语言 由于它具有编写灵活 运行快速等优点 迅速成为Web程序员的首选语言 前不久的一份权威调查表明 现在已经有 %的网站使用PHP作为主要的服务器端编程语言
但是 要成为一名PHP编程高手却并不容易 并不像很多人想象的那样 只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了 真正的PHP高手还需要考虑更多的其它问题 以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则
懒惰是金
编写漂亮的代码
追求程序的速度 而不是编程的速度
一 懒惰是金
做一个懒惰的程序员吗?这个想法太奇怪了!因为这个世界上最忙碌的人可能就是计算机程序员了 但正是因为程序员太忙了 所以才应该在编程时学会偷懒
对于一个程序员来说 懒惰的方法有两种 其一 大胆使用现成的别人的程序代码 把这些代码融入到你自己的程序或者项目中去 其二是编写一些有用的代码建立一个函数库 在将来编写程序时可以顺手拈来 省去了许多重复的劳动 自然就可以懒惰一点了
这两种偷懒的方法都非常适合PHP程序员了
首先 PHP是在自由开放的环境中诞生和成长的一门语言 在世界各地 有成千上万的程序员 他们一直在为PHP的完美而不断奋斗 他们也愿意和别人分享自己的聪明才智和自己编写的代码 你每天都可以从一些PHP网站 邮件列表 新闻组发现大量的优秀的程序代码 这样说 我并不是鼓励你整天等著让别人为你编写代码 但是你可以 站在伟人的肩膀上 充分发扬 拿来主义 聪明地应用别人的程序代码可以节省你大量时间 其次 在PHP中 你可以方便地建立自己的函数库 这样可以在你以后编写程序时省去很多麻烦
下面笔者为大家介绍几个通用的函数 这些函数有的来自网上的一些开放源代码的项目 有的精选自邮件列表 如果你能把它们加入到你自己的函数库中 迟早你将会发现自己受益无穷
通用数据库处理函数
和其它的CGI函数相比 PHP的优点之一是具有很强大的数据库处理能力 但是 在PHP中 对于不同的数据库都使用一些特定的函数来专门处理 缺少通用的数据库处理函数 这大大降低了程序代码的可移植性 这也为初学编程的朋友带来了很多不便
在网上 许多程序员都通过封装类解决了这个问题 他们编写了统一的函数用来处理任何流行的数据库——不管是在Linux世界深受欢迎的mysql_query($Query_String $this-Link_ID); ss_timing_stop(); ss_log(INFO ss_timing_current() Secs - $Query_String); $this-Row = ; $this-Errno = mysql_errno(); $this-Error = mysql_error(); if ($halt_on_error && !$this-Query_ID) { $this-halt( Invalid SQL: $Query_String); } return $this-Query_ID; }
二 编写漂亮的代码
将后台程序与前端程序分开
在编写PHP程序时 有些代码是用来处理一些事务 例如操作数据库 进行数学运算等 而另外的一些代码则只是事务处理的结果显示出来 例如一些使用echo 语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码 首先我们应该清晰地区分这两种代码 把前者称为后台程序 把后者称为前端程序
因为PHP是一种嵌入式编程语言 也就是说 所有的PHP代码都可以嵌入到HTML代码之中 这为程序的编写带来了许多便利之处 但是 物极必反 如果在一段较长的程序中将PHP代码和HTML代码混合编写 这将使程序杂乱无章 不利于程序的维护和阅读 所以我们需要尽可能地将这些程序中混杂于HTML代码中的PHP代码移植出来 在专门的文件中将这些代码封装成函数 然后在HTML代码中使用 include语句来包含这些文件 在适当的位置调用这些函数即可
这种做法一方面使HTML代码和PHP代码都简单易读 另一方面因为HTML代码需要不断更新 而这种分离的方法可以确保后台程序不会被破坏 同前端程序不同 后台程序更多追求的是稳定 结构化 极少更改 所以应该认真地设计和管理 其实 在设计台程序时 投入大量时间是值得的 现在栽树 以后乘凉 在以后的设计工作中将可以轻松地使用现在编写的后台程序
灵活使用包含文件
正如前面所说的那样 后台程序应当安排在一系列的包含文件中 包含文件可以通过include语句在需要时动态装入 也可以在php ini文件中通过使用auto_prepend_file指令预先自动装入 如果使用后一种方法的话 虽然取得了一劳永逸的好处 但是也有一些缺点值得我们注意 下面的一段代码向我们展示了解析一个庞大的包含文件需要一定的时间
require(timing inc); ss_timing_start(); include(test inc); ss_timing_stop(); echo ss_timing_current() ?
在上面的代码中 test inc是一个 行的包含文件 运行的结果显示 解析这个包含文件花费了 秒钟 对于一个大型网站来说 这个速度并不是可以忽略不记的
使用包含文件的另外一个缺点是 如果一个文件中的一个语句发生错误 将会使整个网站的PHP程序都无法运行 所以使用起来也及其小心
其实 对包含文件稍做处理 即可以使包含文件只在需要时进行解析 下面的代码使abc inc文件只在程序需要时才作解析
if ( defined( __LIBA_INC) ) return; define( __LIBA_INC ); /* * 代码 */ ?
使用面向对象的编程方法
PHP 也是一种面向对象的语言 面向对象的编程方法是优秀的程序员们非常推崇的一种软件设计方法 在PHP编程中可以充分发挥面向对象语言的优势 对编程中的对象进行封装 在前面的代码中 我们使用了面向对象的方法 例如在管理数据库时 我们将query()函数封装进数据库类中 这极大地方便了代码的管理 增加了程序的可读性
三 追求程序速度 而不是编程的速度
在网站建设中 程序运行速度和网页下载速度都是关系成败的重要因素 作为一名Web程序员 应该更加注意代码的运行速度 下面介绍的几种方法都在不同程度上提高了代码的运行速度
使用内嵌的HTML代码 而不是PHP的echo语句
因为PHP是一门嵌入式Web编程语言 可以将HTML代码和PHP代码相互嵌入 但是很多程序员担心在HTML代码中过多的使用 嵌入PHP代码会多次调用PHP解释器 从而降低了PHP代码的运行速度 所以宁愿使用PHP的echo语句来输出HTML代码 而不直接使用HTML代码 但事实却恰恰相反 每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码 所以 只在需要时才嵌入PHP代码 而大多数的时候直接使用HTML代码输入结果 不但不会降低程序的运行速度 而且因为减少了对echo语句的解析 往往可以提高代码的运行速度
下面的一段代码证明了我们的结论 在这段代码中 我们使用了前面介绍的时间测试函数
使用str-replace而不是ereg-replace 习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作 因为在PHP中ereg_replace的用法和Perl中模式匹配的用法相近 但是 下面的这段代码证明 使用str_replace 代替 ereg_replace将可以大大提高代码的运行速度
测试str_replace和ereg_replace的运行速度
//这段代码测试str_replace的运行速度 emphasis; ? for ($i= ; $i ; $i++) { str_replace(i b $string) } ?
//这段代码测试ereg_replace的运行速度 for ($i= ; $i ; $i++) { ereg_replace(([/]*)i \ b $string) } ? //打印结果
结论
使用str_replace的时间 - 使用ereg_pattern的时间 -
运行上面的代码 得到的结果是
使用str_replace的时间 - 使用ereg_pattern的时间 -
从运行的结果我们可以看出使用str_replace替代ereg_replace作为字符串替换函数 极大地提高了代码的运行速度
注意字符串的引用
PHP 和其它很多编程语言一样 可以使用双引号( )来引用字符串 也可以使用单引号() 但是在PHP中 如果使用双引号来引用字符串 那么PHP解析器将首先分析字符串中有没有对变量的引用 有变量的话 将对变量进行替换 如果是单引号 则没有如此复杂——直接将单引号包含起来的所有字符串直接显示出来 显然 在PHP编程中 如果使用单引号引用字符串变量要比使用双引号快速一些
在数据库中避免使用联合操作
比起其它的Web编程语言来说 PHP的数据库功能十分强大 但是在PHP中数据库的运行仍然是一件十分费时费力的事情 所以 作为一个Web程序员 要尽量减少数据库的查询操作 同时应该为数据库建立适当的索引 另一件值得注意的事情是在用PHP操作数据库时 尽可能不使用多个数据表的联合操作 尽管联合操作可以增强数据库的查询功能 但是却大大增加了服务器的负担
为了说明这个问题 我们可以看看下面的这个简单的例子
我们在数据库中创建了两个数据表foo和big_foo 在数据表foo中 只有一个字段 包含了从 - 之间的所有自然数 数据表big_foo同样只有一个字段 但包含了从 - 之间的全部自然数 所以 从大小上说 big_foo等于foo与它自身进行了联合操作
$db-query( select * from foo ); secs $db-next_record(); secs $db-query( insert into foo values (NULL) ); secs $db-query( select * from foo as a foo as b ); secs $db-query( select * from foo as a foo as b where a id b id ); secs $db-query( select * from foo as a foo as b where a id = b id ); secs $db-query( select * from big_foo ); secs
从上面操作结果我们可以发现 对于两个有 条记录的数据表进行联合 其速度并不比对一个 条纪录的大型数据表单独进行操作快多少
注意include与require的区别
在PHP变成中 include()与require()的功能相同 但在用法上却有一些不同 include()是有条件包含函数 而require()则是无条件包含函数 例如在下面的一个例子中 如果变量$somgthing为真 则将包含文件somefile
if($something){ include( somefile ); }
但不管$something取何值 下面的代码将把文件somefile包含进文件里
if($something){ require( somefile ); }
下面的这个有趣的例子充分说明了这两个函数之间的不同
$i = ; while ($i ) { require( somefile $i ); $i++; }
在这段代码中 每一次循环的时候 程序都将把同一个文件包含进去 很显然这不是程序员的初衷 从代码中我们可以看出这段代码希望在每次循环时 将不同的文件包含进来 如果要完成这个功能 必须求助函数include()
$i = ; while ($i ) { include( somefile $i ); $i++; }
注意echo和print的区别
PHP中echo和print的功能也基本相同 但是两者之间也有细微差别 在PHP代码中可以把print作为一个普通函数来使用 例如执行下面的代码后变量$res的值将为 $ret = print Hello World ;
lishixinzhi/Article/program/PHP/201405/30767
相关问答
Q1: 最好用的PHP数据库操作类-ezSQL
ezSQL是一个非常好用的PHP数据库操作类 著名的开源博客WordPress的数据库操作就使用了ezSQL的MySQL部分 该数据库操作类支持几乎所有主流的数据库 如 PHP PDO mySQL Oracle InterBase/FireBird PostgreSQL SQLite以及MS SQL等 ezSQL具有很强的调试功能 可以快速地查看SQL代码的执行情况 使用ezSQL 可以为我们节省开发时间 简化代码并提高运行效率
ezSQL的优点就不用多说了 它小巧 快速 简单 易用 并且开源 还有就是安全 你没想到的细节它都为你考虑了 你只需要在你的脚本开头包含相关的PHP文件 然后你就可以使用更好用的一套ezSQL函数来代替标准的PHP数据库操作函数
下面是ezSQL中一些主要的函数
$db get_results 从数据库中读取数据集
$db get_row 从数据库中读取一行数据
$db get_col 从数据库中读取一列指定的数据集
$db get_var 从数据库的数据集中读取一个值
$db query 执行一条SQL语句
$db debug 打印最后执行的SQL语句及其返回的结果
$db vardump 打印变量的结构及其内容
$db select 选择一个新数据库
$db get_col_info 获取列的信息
$db hide_errors 隐藏错误
$db show_errors 显示错误
ezSQL的使用方法很简单 首先下载ezSQL源代码 然后将ez_sql_core php文件和ez_sql_mysql php文件(这里以mySQL为例)放到与你的脚本文件相同的目录下 然后将下面的代码添加到你的脚本文件的最前面 这样就可以正常使用ezSQL了
?php// 包含ezSQL的核心文件include_once "ez_sql_core php";// 包含ezSQL具体的数据库文件 这里以mySQL为例include_once "ez_sql_mysql php";// 初始化数据库对象并建立数据库连接$db = new ezSQL_mysql( db_user db_password db_name db_host );?
下面是ezSQL中一些主要函数的应用实例 这些代码均来自于ezSQL的官方帮助文档
实例一
// Select multiple records from the database and print them out $users = $db get_results("SELECT name email FROM users");foreach ( $users as $user ) { // Access data using object syntax echo $user name; echo $user email;}
实例二
// Get one row from the database and print it out $user = $db get_row("SELECT name email FROM users WHERE id = ");echo $user name;echo $user email;
实例三
// Get one variable from the database and print it out $var = $db get_var("SELECT count(*) FROM users");echo $var;
实例四
// Insert into the database$db query("INSERT INTO users (id name email) VALUES (NULL justin jv@foo )");
实例五
// Update the database$db query("UPDATE users SET name = Justin WHERE id = )");
实例六
// Display last query and all associated results$db debug();
实例七
// Display the structure and contents of any result(s) or any variable$results = $db get_results("SELECT name email FROM users");$db vardump($results);
实例八
// Get one column (based on column index) and print it out $names = $db get_col("SELECT name email FROM users" )foreach ( $names as $name ) { echo $name;}
实例九
// Same as above ‘but quicker’foreach ( $db get_col("SELECT name email FROM users" ) as $name ) { echo $name;}
实例十
lishixinzhi/Article/program/PHP/201311/21297
Q2: php 连接数据库类
我也刚刚学PHP,正在研究中,虽然你只给10分........
首先,将代码保存到一个文件,如:mysql.class.php
其次,在一个常用的文件里调用:比如头部文件header.php,因为我放在根目录所以用下面方式导入其他文件:
require dirname(__FILE__) . 'include/config.php';
//导入类文件
require dirname(__FILE__) . 'include/mysql.class.php';
//定义一个类及初始化数据库类
$db = new mysql($db_host, $db_user, $db_pass, $db_name);
$db_host = $db_user = $db_pass = $db_name = NULL;
然后,在test.php文件调用:
require_once dirname(__FILE__) . '/header.php';
使用方法:
$sql = "读取表";
$res = $db-query($sql);
$info = array();//定义数组
while($row=$db-fetchRow($res))
{
$arr['id'] = $row['id'];
$arr['title'] = $row['title'];
$info[] = $arr;
}
可以在显示的地方用:
foreach($info as $i)
{
echo $i['title']."br /";
}
或是直接使用while
还用另一种调用方式:
$here_area = $db-getRow("select areaid,areaname from {$table}area where areaid='$areaid'");
$here[] = array('name'=$here_area['areaname'],'id'=$here_area['areaid']);
测试通过,因为我正在使用.....................................
config.php代码:
?php
$db_host = "localhost";
$db_name = "test";
$db_user = "root";
$db_pass = "";
$table = "mini_";
$charset = "gb2312";
$dbcharset = "gbk";
?
mysql.class.php代码:
?php
class mysql
{
var $link = NULL;
//自动执行__construct php5类构建方法,如果PHP4和PHP5同时使用会自动使用PHP5的方法
function __construct($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $quiet = 0)
{
//自动执行时调用mysql函数
$this-mysql($dbhost, $dbuser, $dbpw, $dbname, $pconnect, $quiet);
}
//php4类构建方法,如果没有 __construct 就自动执行此功能
function mysql($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $quiet = 0)
{
if ($quiet)
{
$this-connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, $quiet);
}
else
{
$this-settings = array(
'dbhost' = $dbhost,
'dbuser' = $dbuser,
'dbpw' = $dbpw,
'dbname' = $dbname,
'charset' = $charset,
'pconnect' = $pconnect
);
}
}
function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $quiet = 0)
{
global $dbcharset;
if ($pconnect)
{
if (!($this-link = @mysql_pconnect($dbhost, $dbuser, $dbpw)))
{
if (!$quiet)
{
$this-ErrorMsg("Can't pConnect MySQL Server($dbhost)!");
}
return false;
}
}
else
{
if (PHP_VERSION = '4.2')
{
$this-link = @mysql_connect($dbhost, $dbuser, $dbpw, true);
}
else
{
$this-link = @mysql_connect($dbhost, $dbuser, $dbpw);
mt_srand((double)microtime() * 1000000);
}
if (!$this-link)
{
if (!$quiet)
{
$this-ErrorMsg("Can't Connect MySQL Server($dbhost)!");
}
return false;
}
}
$this-dbhash = md5($this-root_path . $dbhost . $dbuser . $dbpw . $dbname);
$this-version = mysql_get_server_info($this-link);
if ($this-version '4.1')
{
if ($dbcharset != 'latin1')
{
mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this-link);
}
if ($this-version '5.0.1')
{
mysql_query("SET sql_mode=''", $this-link);
}
}
if ($dbname)
{
if (mysql_select_db($dbname, $this-link) === false )
{
if (!$quiet)
{
$this-ErrorMsg("Can't select MySQL database($dbname)!");
}
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
function query($sql, $type = '')
{
if ($this-link === NULL)
{
$this-connect($this-settings['dbhost'], $this-settings['dbuser'], $this-settings['dbpw'], $this-settings['dbname'], $this-settings['charset'], $this-settings['pconnect']);
$this-settings = array();
}
if ($this-queryCount++ = 99)
{
$this-queryLog[] = $sql;
}
if ($this-queryTime == '')
{
if (PHP_VERSION = '5.0.0')
{
$this-queryTime = microtime(true);
}
else
{
$this-queryTime = microtime();
}
}
if (!($query = mysql_query($sql, $this-link)) $type != 'SILENT')
{
$this-error_message[]['message'] = 'MySQL Query Error';
$this-error_message[]['sql'] = $sql;
$this-error_message[]['error'] = mysql_error($this-link);
$this-error_message[]['errno'] = mysql_errno($this-link);
$this-ErrorMsg();
return false;
}
return $query;
}
function affected_rows()
{
return mysql_affected_rows($this-link);
}
function num_fields($query)
{
return mysql_num_fields($query);
}
function error()
{
return mysql_error($this-link);
}
function errno()
{
return mysql_errno($this-link);
}
function num_rows($query)
{
return mysql_num_rows($query);
}
function insert_id()
{
return mysql_insert_id($this-link);
}
function fetchRow($query)
{
return mysql_fetch_assoc($query);
}
function fetcharray($query)
{
return mysql_fetch_array($query);
}
function version()
{
return $this-version;
}
function close()
{
return mysql_close($this-link);
}
function ErrorMsg($message = '', $sql = '')
{
if ($message)
{
echo "$message\n\n";
}
else
{
echo "bMySQL server error report:";
print_r($this-error_message);
}
exit;
}
function getCol($sql)
{
$res = $this-query($sql);
if ($res !== false)
{
$arr = array();
while ($row = mysql_fetch_row($res))
{
$arr[] = $row[0];
}
return $arr;
}
else
{
return false;
}
}
function getOne($sql, $limited = false)
{
if ($limited == true)
{
$sql = trim($sql . ' LIMIT 1');
}
$res = $this-query($sql);
if ($res !== false)
{
$row = mysql_fetch_row($res);
if ($row !== false)
{
return $row[0];
}
else
{
return '';
}
}
else
{
return false;
}
}
function getAll($sql)
{
$res = $this-query($sql);
if ($res !== false)
{
$arr = array();
while ($row = mysql_fetch_assoc($res))
{
$arr[] = $row;
}
return $arr;
}
else
{
return false;
}
}
//使用: getRow($sql,true) 如果有true那值是 limit 1,读取一条信息
function getRow($sql, $limited = false)
{
if ($limited == true)
{
$sql = trim($sql . ' LIMIT 1');
}
$res = $this-query($sql);
if ($res !== false)
{
return mysql_fetch_assoc($res);
}
else
{
return false;
}
}
}
?
Q3: php可以支持目前主流的数据库
php支持的数据库有很多噢,下面列举一下!
MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
MsSql
ms SQL是指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。
Oracle
oracle是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
Access
Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
PostgreSQL
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。
InterBase
InterBase是一种关系数据管理系统(Relational database management system RDBMS),它提供了在单机或多用户环境中的快速数据处理及共享的工具。InterBase的核心是提供透明的多机种支持的网络运行服务器技术。InterBase是可以在Windows 95、Windows NT、Novell NetWare及多种UNIX操作系统上运行的工具。
CUBRID
CUBRID是一个全面开源,且完全免费的关系数据库管理系统。
dBase
dBase是第一个在个人电脑上被广泛使用的单机版数据库系统。
Firebird/InterBase
Firebird特性介绍firebird是一个全功能的,强大高效的,轻量级,免维护的数据库。
IBM DB2
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统
Informix
Informix是IBM公司出品的关系数据库管理系统(RDBMS)家族。
MaxDB
MaxDB是一种企业级数据库管理系统。
MongoDB
MongoDB 是一个基于分布式文件存储的数据库。
mSQL
mSQL(mini SQL)是一个单用户数据库管理系统,个人使用免费,商业使用收费。由于它的短小精悍,使其开发的应用系统特别受到互联网用户青睐。
SQLite
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
SQLSRV
SQL Server(SQLSRV )是由Microsoft开发和推广的关系数据库管理系统(RDBMS)。
Sybase
美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。
tokyo_tyrant
一个可持久化数据的,好处是速度不错,而且大至兼容Memcached的文本协议,客户端可以继续使用SpyMemcached。
希望对你有帮助,谢谢采纳!
关于php通用数据库类和php数据库类库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







