PHP脚本数据库功能详解(3)

 更新时间:2016年11月25日 17:15  点击:1601
(作者:王凯波)
  用类加快PHP的数据库开发
  数据库的访问函数较多,使用不当会降低效率,甚至导致错误。而PHP的本身就是开放的和可扩充的,很多人为它开发各种功能的源代码。每一个PHP程序员都应该善于继承他人的成果,节省时间和精力。站在巨人的肩膀上,才能看得更远。当然,你也可以把你的代码共享出来,体会自己的劳动被承认和创造价值而带来的成就感。
  使用数据库类,可以使我们完全不必考虑具体的数据库类型,而专注于程序的开发上。
  众多的开发工具包中,PHPLib是性能较稳定、功能较完善的一个。PHPLib可以在http://phplib.netuse.de/ 获得。它包含了数据库的支持类。以MySQL数据库为例,PHPLib自带名为DB_Sql的类。它包装了数据库的连接、查询、取结果、数据库表的遍历等功能。
  使用数据库类,可以使我们完全不必考虑具体的数据库类型,而专注于程序的开发上。即使数据库系统类型换了,程序代码也不用改。同时,数据库类提供了完整而健壮的数据库访问方法,这可能是使用类的包装的最大的优势了。
  下面,我们就使用PHPLib提供的数据库类,来访问我们刚才建立的数据库,并对内容进行显示。
  〈?
  require "db_mysql.php";
  //包含数据库类的生成文件
  $db=new DB_Sql;
  //声明数据库类的实例
  $db-〉connect("ResumeDB","localhost", "root", "");
  //连接数据库服务器
  //提供的参数依次为:数据库名,主机名,用户名,用户密码
  if ($db-〉Link_ID)
  //判断是否正确建立连接
  {
   $db-〉query("select ID,Name,Intro FROM Resume");
  //查询
   if ($db-〉nf())
  //判断结果集是否为空
   {
   while ($db-〉next_record())
  //取得下一行记录值,直到记录集内容取完
   {
   echo "ID:", $db-〉f("ID"); //f()函数返回当前记录某个子段的值
   echo "〈br〉";
   echo "姓名:";
   $db-〉p("Name");
  //p()函数直接打印某个子段的值
  //等价于echo $db-〉f("name")
   echo "〈br〉";
   echo "简介:";
6. 密码验证
  也许你想在自己的网站放上你的照片集,而且只想给自己知心的朋友看,这时你需要一个密码验证的程序。
6.1 基于HTTP验证
  如何用PHP来实现密码验证的功能呢?我们可以使用简短的PHP代码,使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。在PHP中,客户端用户输入的信息传送到服务端之后自动保存在$PHP_AUTH_USER, $PHP_AUTH_PW, 以及 $PHP_AUTH_TYPE这三个全局变量中。利用这些变量,我们就可以根据实现保存在数据文件或数据库中的用户帐号信息验证用户身份。
  不过在这里需要提醒使用者注意的一点是:只有在Apache模块方式运行的时候,PHP脚本才能使用$PHP_AUTH_USER, $PHP_AUTH_PW, 以及 $PHP_AUTH_TYPE这三个变量。如果用户使用的是CGI模式的PHP则无法实现基于HTTP的验证功能。
6.2 下面,我们就来详细介绍一下如何使用PHP对用户身份进行验证。
  在下例中,我们是使用$PHP_AUTH_USER和$PHP_AUTH_PW这两个变量来验证进入者是否合法并允许进入。在本例中被允许登录的用户名称和密码对分别为tnc和nature:
<?
if(!isset($PHP_AUTH_USER))
{
Header("WWW-Authenticate: Basic realm="My Realm"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel buttonn";
exit;
}
else
{
if ( !($PHP_AUTH_USER=="tnc" && $PHP_AUTH_PW=="nature") )
{
// 如果是错误的用户名称/密码对,强制再验证
Header("WWW-Authenticate: Basic realm="My Realm"");
Header("HTTP/1.0 401 Unauthorized");
echo "ERROR : $PHP_AUTH_USER/$PHP_AUTH_PW is invalid.";
exit;
}
else
{
echo "Welcome tnc!";
}
?>
  事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。
6.3 根据指定的验证信息核实用户身份
  首先,我们可以使用以下代码确定用户是否已经输入了用户名和密码,并显示出用户输入的信息。
<?php
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="My Private Stuff"');
1. 介绍
1.1. 标准化的重要**
标准化问题在某些方面上让每个人头痛,让人人都觉得大家处于同样的境地。这有助于让这些建议在许多的项目中不断演进,许多公司花费了许多星期逐子字逐句的进行争论。标准化不是特殊的个人风格,它对本地改良是完全开放的。
1.2. 优点
当一个项目尝试着遵守公用的标准时,会有以下好处:
· 程序员可以了解任何代码,弄清程序的状况
· 新人可以很快的适应环境
· 防止新接触php的人出于节省时间的需要,自创一套风格并养成终生的习惯
· 防止新接触php的人一次次的犯同样的错误
· 在一致的环境下,人们可以减少犯错的机会
· 程序员们有了一致的敌人
1.3. 缺点
· 因为标准由一些不懂得php的人所制定,所以标准通常看上去很傻
· 因为标准跟我做的不一样,所以标准通常看上去很傻
· 标准降低了创造力
· 标准在长期互相合作的人群中是没有必要的
· 标准强迫太多的格式
1.4. 讨论
许多项目的经验能得出这样的结论:采用编程标准可以使项目更加顺利地完成。标准是成功的关键么?当然不。但它们可以帮助我们,而且我们需要我们能得到的所有的帮助!老实说,对一个细节标准的大部分争论主要是源自自负思想。对一个合理的标准的很少决定能被说为是缺乏技术**的话,那只是口味的原因罢了。所以,要灵活的控制自负思想,记住,任何项目都取决于团队合作的努力。
1.5. 解释
1.5.1. 标准实施
首先应该在开发小组的内部找出所有的最重要的元素,也许标准对你的状况还不够恰当。它可能已经概括了 重要的问题,也可能还有人对其中的某些问题表示强烈的反对。无论在什么情况下,只要最后顺利的话,人们将成熟的明白到这个标准是合理的,然后其他的程序员们也会发现它的合理**,并觉得带着一些保留去遵循这一标准是值得的。如果没有自愿的合作,可以制定需求:标准一定要经过代码的检验。如果没有检验的话,这个解决方案仅仅是一个建立在不精确的基础上的一大群可笑的人。
1.5.2. 认同观点
1. 这行不通;
2. 也许可行吧,但是它既不实用又无聊;
3. 这是真的,而且我也告诉过你啊;
4. 这个是我先想到的;
5. 本来就应该这样。
如果您带着否定的成见而来看待事物的话,请您保持开放的思想。你仍可以做出它是废话的结论,但是做出结论的方法就是你必须要能够接受不同的思想。请您给自己一点时间去做到它。
PHP4的核心:Zend
台湾彭武兴先生写的专题《PHP4的核心:Zend》。虽然是去年写的,但觉得有助于对PHP/Zend有个概念上的认识。所以翻译出来。第一次知道,原来Zend引擎的名称由Zeev Suraski和Andi Gutmans二位在PHP担任核心开发工作的资深设计师的名字合体.
作者:彭武兴 介绍:他架设过台湾文化大学华冈资讯网,毕业后任职NEC担任网管,及BIGLOBE的网管.并曾在网际空间杂志开过网际字解专栏,发表文章.在互联网方面特别是有关WEB方面,有着深入的研究与实作经验.目前任职于讯达电脑负责网络的相关工作.著有《PHP圣经》。
一.概述:
    Zend引擎的名称由Zeev Suraski和Andi Gutmans二位在PHP担任核心开发工作的资深设计师的名字合体.开发的目的师为了研发新的脚本执行机制,而PHP4就是这套崭新的Zend引擎的第一个实作产品。在一些特殊测试环境下,Zend(PHP$)的执行速度比PHP3及ASP快了几倍到几百倍之多,这也意味着网站的后端CGI界面的统一者非PHP4?Zend莫属了。(当然,技术是不断进步的,说不定哪一天又出现了新的引擎。)
    Zend引擎在研发二年多之后,已经变成类似VBA功能的广义程式环境,它不但有传统的PHP函数功能,更增加了分散式物件(COM)的功能,并且能够在不同的操作平台上执行。以这种潜力发展下去,VBA的终结者非Zend莫属。
    Zend在PHP4上实作时更针对了PHP3之前最大缺憾的session做了最完整的承诺,同时加入了一些未来的功能,如CyberCash...等等。
    在opensource社群中,唯一能保持声势,却又尚未被微软公司视为竞争对手的,PHP/Zend是最好的例子。它已经完全地将ASP丢到了身后,正往VBA的环境发展。而微软只全力对付Linux,没有注意到来自PHP/Zend的威胁。
系统图示:
使用者的浏览器发出浏览请求,Web服务器接收请求。
Web服务器发觉是PHP的要求,需要PHP引擎解析(根据文件的扩展名),于是将它送到PHP4的Zend引擎上。
Zend引擎将文件从硬盘上读取,送到Zend线上编译器(Run-time Compiler),进行程序直译工作。(或许日后的Zend Compiler出来以后可以省略线上编译工作。)
Zend引擎的线上执行单元(Excutor)执行编译过的PHP程序。并在需要时找相关的模组执行协力动作(如XML,IMAP,ODBC...等等)。
Zend将执行后的结果整理成HTML文件,送给Web服务器。
Web服务器将结果通过网络,传回使用者的浏览器。
Session是否必须依赖Cookie?
www.ouryh.net    银河技术在线ㄕ整理时间:2001-8-7ㄕ作者: 不详 ㄕ来源: 不详 ㄕ阅读:36

PHP中的session可以默认情况下是使用客户端的Cookie(以便和普通意义上的Cookie区别,我称之为session cookie,普通意义上的Cookie为Cookie)来保存session id的,但是PHP中的session是否只能使用session cookie呢?当然不是,否则何必还弄个session出来,不如直接用Cookie算了.Session的一大优点就是当客户端的Cookie被禁用时会自动把session id附在URL中,这样再通过session id就能记住session变量了.
下面我写两个文件来证实一下,首先在浏览器中设置禁用Cookie.
<? //文件名为test1.php
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>
";
?>
<?//文件名为test2.php
session_start();
if (session_is_registered("url")) {
echo "Congratulations.
";
$url="test1.php";
echo "<a href=$url>goto test1.php</a>
";
}
else echo "Failed.
";
?>
现在在浏览器中输入"http://localhost/test1.php",把鼠标移到链接上看看状态栏上的地址,不是简单的"http://localhost/test2.php",而是这种形式:"http://localhost/test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b".你还可以查看Html的源文件,源文件是这种形式:
<a href="test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b">goto test2.php</a>
所以说这完全是PHP的功劳,和浏览器无关,也就是说无论你用什么浏览器session都有效,而不是有的人认为的只对IE有用.
但是,我们的超链接是语句是由echo语句输出的,如果超链接不包含在PHP的标签<? ?>之内会怎样呢?还是写个例子来验证一下,把test1.php稍作修改:
<?
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>
";
?>
<a href="test2.php">(Html形式)goto test2.php</a>
[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • PHP连接公司内部服务器的MYSQL数据库的简单实例

    “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • 深入分析C#连接Oracle数据库的连接字符串详解

    本篇文章是对C#连接Oracle数据库的连接字符串进行了详细的分析介绍,需要的朋友参考下...2020-06-25