文档库 最新最全的文档下载
当前位置:文档库 › PHP从入门到精通教程

PHP从入门到精通教程

PHP从入门到精通教程
PHP从入门到精通教程

标题:PHP 基础教程

出处:风流的CG 网络日志

时间:Mon, 28 Aug 2006 07:24:34 +0000

作者:yufeng

地址:http:///read.php?38

内容:

提供给新手学习的PHP 新手教程,是一个比较有价值的PHP 新手教程!

一、PHP 简介

PHP 是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP 建立一个真正交互的WEB 站点。本教程并不想让你完全了解这种语言,只是能使你尽快加

入开发动态web 站点的行列。我假定你有一些HTML(或者HTML 编辑器)的基本知识和

一些编程思想。

1.简介

PHP 是能让你生成动态网页的工具之一。PHP 网页文件被当作一般HTML 网页文件来处理

并且在编辑时你可以用编辑HTML 的常规方法编写PHP。

PHP 代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP 是完全免费的,不用花钱,你可以从PHP 官方站点(https://www.wendangku.net/doc/4524175.html,)自由下载。PHP 遵守GNU 公共许可(GPL),在

这一许可下诞生了许多流行的软件诸如Linux 和Emacs。你可以不受限制的获得源码,甚至

可以从中加进你自己需要的特色。PHP 在大多数Unix 平台,GUN/Linux 和微软Windows 平台上均可以运行。怎样在Windows 环境的PC 机器或Unix 机器上安装PHP 的资料可以在

PHP 官方站点上找到。安装过程很简单。

如果你的机器解决了2000 问题,那么PHP 也一样没有千年虫问题!

1.1 历史

三年前,Rasmus Lerdorf 为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。

PHP 虽然很容易学习,但是速度上比mod_perl(植入web 服务器的perl 模块)慢。现在有

了可以与mod_perl 速度想媲美的被称作Zend 的新引擎,PHP4 就可以充分利用这个引擎。而

PHP4 还处在BETA 测试阶段。Andy Gutmans 和Zeev Suraki 是Zend 的主要作者。可以去

Zend 站点(https://www.wendangku.net/doc/4524175.html,)了解更多。

PHP 的应用在个人性质的web 工程中增长显著。根据Netcraft 在1999 年10 月的报告,有

931122 个域和321128 个IP 地址利用PHP 技术。

1.2 PHP 的先进之处

应用PHP 有许多好处。当然已知的不利之处在于PHP 由于是开放源码项目,没有什么商业

支持,并且由此而带来的执行速度缓慢(直到PHP4 之前)。但是PHP 的邮件列表很是有用

而且除非你正在运行像Yahoo!或者https://www.wendangku.net/doc/4524175.html, 这样的极受欢迎的站点,你不会感觉出PHP

的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP 有那些优点:

- 学习过程

我个人更喜欢PHP 的非常简单的学习过程。Java 和Perl 不同,你不必把头埋进100 多页的与

文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP 编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。

PHP 的语法与C,Perl,ASP 或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP 太简单了。相反的,如果你对PHP 了解较多,那么你对于其他几种语言的学习都很简单了。你只需要30 分钟就可以将PHP 的核心语言特点全部掌握,你可能已经非常了解HTML,甚

至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB 站点。由于PHP 代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP 使得你的站点更加具有动态特性。

- 数据库连接

PHP 可以编译成具有与许多数据库相连接的函数。PHP 与MySQL 是现在绝佳的组合。你还

可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB 就是最常用的可以提供一般事务需要的一系列基库。

- 可扩展性

就像前面说的那样,PHP 已经进入了一个高速发展的时期。对于一个非程序员来说为PHP 扩展附加功能可能会比较难,但是对于一个PHP 程序员来说并不困难。

- 面向对象编程

PHP 提供了类和对象。基于web 的编程工作非常需要面向对象编程能力。PHP 支持构造器、

提取类等。

- 可伸缩性

传统上网页的交互作用是通过CGI 来实现的。CGI 程序的伸缩性不很理想,因为它为每一个正在运行的CGI 程序开一个独立进程。解决方法就是将经常用来编写CGI 程序的语言的

解释器编译进你的web 服务器(比如mod_perl,JSP)。PHP 就可以以这种方式安装,虽然很少

有人愿意这样以CGI 方式安装它。内嵌的PHP 可以具有更高的可伸缩性。

- 更多特点

PHP 的开发者们为了更适合web 编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP 连接包括Oracle,MS-Access,Mysql 在内的大部分数据库。你可以

在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,

你可以选择你的PHP 安装版本需要哪些功能。引用Nissan 的Xterra 的话来说就是PHP 可以

做到你想让它做到的一切而且无所不能!

1.3 竞争对手:ASP,mod_perl,JSP

我当然不清楚ASP/JSP 能做些什么。不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN 和Microsoft 的百万美金所影响),请顺便通知我。

据我所知,JSP 基于Java,因此Java 程序员可以轻松开始编码。ASP 只是一个一般的引擎,

具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。

mod_perl 与Perl 一样强大,只是更快一些。

二、PHP 入门

PHP 站点的在线教程已经很棒了。在那里还有一些其他教程的链接。而本文的该部分将让你对PHP 熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速开始你的PHP

编程。

2.1 首要条件

你首先必须要有一个正在工作着的支持PHP 的web 服务器。我假定在你的服务器上所有PHP

文件的扩展名为.php3。

2.2 PHP 的安装

生成一个名为test.php3 的文件,含有以下内容:

然后在你的浏览器中打开此文件。看看这个页面你就知道你的PHP 安装使用的选项了。

2.3 语法

就像前面提到的一样,你可以混合编写你的PHP 代码和HTML 代码。因此你必须有办法将

两者区别开来。以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法!

从HTML 中分离

以下是可以使用的方法:

<% . . . %>

语句

与Perl 和 C 一样,在PHP 中用(;)来分隔语句。那些从HTML 中分离出来的标志也表示

语句的结束。

注释

PHP 支持C,C++和Unix 风格的注释方式:

/* C,C++风格多行注释*/

// C++风格单行注释

# Unix 风格单行注释

Hello,World!

通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语:

</p><p><?</p><p>echo "Hello World!";</p><p>?></p><p>

First PHP page


// Single line C++ style comment

/*

printing the message

*/

echo "Hello World!";

# Unix style single line comment

?>

2.4 数据类型

PHP 支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP 运行过程决定(真是好的解脱!。但是类型也可以被函数cast 或者settype()明确的设定。)数值

数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值:

$a = 1234; # 十进制数

$a = -123; # 负数

$a = 0123; # 八进制数(等于十进制数的83)

$a = 0x12; # 十六进制数(等于十进制数的18)

$a = 1.234; # 浮点数"双精度数"

$a = 1.2e3; # 双精度数的指数形式

字符串

字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下:

$first = 'Hello';

$second = "World";

$full1 = "$first $second"; # 产生Hello World

$full2 = '$first $second';# 产生$first $second

可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP 手册中有详细的例子。

数组与哈希表

数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0 开始。虽然我在这里没有说明,

但是你一样可以轻易的使用多维数组。

// 一个包含两个元素的数组

$a[0] = "first";

$a[1] = "second";

$a[] = "third"; // 添加数组元素的简单方法

// 现在$a[2]被赋值为"third"

echo count($a); // 打印出3,因为该是数组有3 个元素

// 用一个语句定义一个数组并赋值

$myphonebook = array (

"sbabu" => "5348",

"keith" => "4829",

"carole" => "4533"

);

// 噢,忘了教长吧,让我们添加一个元素

$myphonebook["dean"] = "5397";

// 你定义的carale 元素错了,让我们更正它

$myphonebook["carole"] => "4522"

// 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看

echo "$myphonebook[0]"; // sbabu

echo "$myphonebook[1]"; // 5348

其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。

对象

使用new 语句产生一个对象:

class foo

{

function do_foo ()

{

echo "Doing foo.";

}

}

$bar = new foo;

$bar->do_foo();

改变变量类型

在PHP 手册中提到:"PHP 不支持(也不需要)直接在声明变量时定义变量类型;变量类型

将根据其被应用的情况决定。如果你为变量var 赋值为一个字符串,那么它变成了一个字符

串。如果你又为它赋了整数值,那么它就变成了整数。"

$foo = "0"; // $foo 是字符串(ASCII 48)

$foo++; // $foo 是字符串"1" (ASCII 49)

$foo += 1; // $foo 现在是整数(2)

$foo = $foo + 1.3; // $foo 是一个双精度数(3.3)

$foo = 5 + "10 Little Piggies"; // $foo 是一个整数(15)

$foo = 5 + "10 Small Pigs"; // $foo 是一个整数(15)

如果想要强行转换变量类型,可以使用与C 语言相同的函数settype()。

2.5 变量与常量

可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global 语句。而你要将该变量的作用范围限制在该

函数之内,使用static 语句。

$g_var = 1 ; // 全局范围

function test()

{

global $g_var; // 这样就可以声明全局变量了

}

更先进一些的是变量的变量表示。请参考PHP 手册。这在有时会显得很有用。

PHP 内置了许多已定义的变量。你也可以用define 函数定义你自己的常量,比如

define("CONSTANT","value")。

2.6 运算符

PHP 具有C,C++和Java 中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同

样使用"="。

算术和字符

以下只有一种运算符是有关字符的:

$a + $b :加

$a - $b :减

$a * $b :乘

$a / $b :除

$a % $b :取模(余数)

$a . $b :字符串连接

逻辑和比较

逻辑运算符有:

$a || $b :或

$a or $b :或

$a && $b :与

$a and $b :与

$a xor $b :异或(当$a 或$b 为true 时为true,两者一样时为false)! $a :非

比较运算符有:

$a == $b :相等

$a != $b :不等

$a < $b :小于

$a <= $b :小于等于

$a > $b :大于

$a >= $b :大于等于

与C 一样PHP 也有三重运算符(?:)。位操作符在PHP 同样存在。

优先权

就和C 以及Java 一样!

2.7 控制流程结构

PHP 有着与C 一样的流程控制。我将在下面大概介绍。

if, else, elseif, if(): endif

if (表达式一)

{

...

}

elseif (表达式二)

{

...

}

else

{

...

}

// 或者像Python 一样

if (表达式一) :

...

...

elseif (表达式二) :

...

else :

...

endif ;

Loops. while, do..while, for

while (表达式)

{

...

}

do

{

...

}

while (表达式);

for (表达式一; 表达式二; 表达式三)

{

...

}

//或者像Python 一样

while (expr) :

...

endwhile ;

switch

switch 是对多重if-elseif-else 结构的最好的替换:

switch ($i)

{

case 0:

print "i equals 0";

case 1:

print "i equals 1";

case 2:

print "i equals 2";

}

break, continue

break 中断当前的循环控制结构。

continue 被用来跳出剩下的当前循环并继续执行下一次循环。

require, include

就像C 中的#include 预处理一样。你在require 中指定的那个文件将替代其在主文件中的位

置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP 文件分割成多个文件并且在不同需要时分别引用它们。

2.8 函数

你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型:

function foo (变量名一, 变量名二, . . . , 变量名n)

{

echo "Example function.\n";

return $retval;

}

所有PHP 代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。

2.9 类

利用类模型建立类。可以参考PHP 手册中对类的详细解释。

class Employee

{

var $empno; // 员工人数

var $empnm; // 员工姓名

function add_employee($in_num, $in_name)

{

$this->empno = $in_num;

$this->empnm = $in_name;

}

function show()

{

echo "$this->empno, $this->empnm";

return;

}

function changenm($in_name)

{

$this->empnm = $in_name;

}

}

$sbabu = new Employee;

$sbabu->add_employee(10,"sbabu");

$sbabu->changenm("babu");

$sbabu->show();

三、从实例入手

PHP 的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP 知识,我们可

以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。

3.1 计划一个站点

一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的通用的页面头部和底部。

标题页面--front.html

这里我们有一个非常简单的html 文件:

</p><p>我的个人主页--欢迎</p><p>

我的个人主页

欢迎


欢迎来我的寒舍,虽然这里现在暂时还没有什么。

不过我希望马上就可以多起来。


Copyright ? 我自己,1999

联系信息页面--count.html

同样我们又有了一个简单页面:

</p><p>我的个人主页--联系信息</p><p>

我的个人主页

联系信息


你可以通过1-800-PHP-INFO 联系我


Copyright ? 我自己,1999

3.2 HTML 到PHP

从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100 多页面且你需要全部更改其头部或底部时

你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP 的头部和底部文件,之后我们只要在每个HTML 页面中引用它们就行了。

我们将把这些include 文件放在一个叫include 的子目录下。下面我们就把这些站点的通用内

容写进文件中。

全站通用变量设定:common.inc

// 全站通用变量

$MyEmail = "phptalk@https://www.wendangku.net/doc/4524175.html,";

$MyEmailLink = "$MyEmail";

$MyName = "PHP Talk";

$MySiteName = $MyName."'s Home Page";

?>

通用页面头部:header.inc

// 定义通用页面头部

?>

</p><p><? echo "$MySiteName - $title"; ?></p><p>


通用页面底部:footer.inc

// 通用页面底部

?>


Copyright ? by

, 1999

新的页面front.php3:

include("include/common.inc");

$title = "Welcome";

include("include/header.inc");

?>

欢迎来我的寒舍,虽然这里现在暂时还没有什么。

不过我希望马上就可以多起来。

include("include/footer.inc");

?>

新的cont.php3:

include("include/common.inc");

$title = "Contact Information";

include("include/header.inc");

?>

你可以通过1-800-PHP-INFO 联系我

include("include/footer.inc");

?>

现在你就可以猜出这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail 地址甚至你的名字,只要修改common.inc 文

件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。

3.3 计数器

让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc 包含以下代码:

/*

|| 一个简单的计数器

*/

function get_hitcount($counter_file)

{

/* 将计数器归零

这样如果计数器还未被使用,初始值将是1

你当然也可以把初始值设成20000 来骗人咯

*/

$count=0;

// 如果存放计数器文件已经存在,读取其中的内容

if ( file_exists($counter_file) )

{

$fp=fopen($counter_file,"r");

// 我们只取了前20 位,希望你的站点不要太受欢迎啊

$count=0+fgets($fp,20);

// 由于函数fgets()返回字符串,我们可以通过加0 的方法将其自动转换为整数

fclose($fp);

// 对文件操作完毕

}

// 增加一次计数值

$count++;

// 将新的计数值写入文件

$fp=fopen($counter_file,"w");

fputs($fp,$count);

fclose($fp);

# 返回计数值

return ($count);

}

?>

然后我们更改front.php3 文件以显示这个计数器:

include("include/counter.inc");

// 我把计数值放在文件counter.txt 中,读出并输出

printf ("

%06d

\n",

get_hitcount("counter.txt"));

include("include/footer.inc");

?>

看看我们的新front.php3

3.4 反馈表单

让我们再添加一个反馈表单以便你的浏览者填写并e-mail 给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail 给你。

PHP 中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。

在process_form.php3 中,变量$mytext 就被赋予了输入的值--非常简单!同样的,你可以从

列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要做的就是为表单中的每一个元素取名以便将来可以引用。

根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail 地址和留言。当浏览者发送表单后,处理该表单的PHP 页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail 给你。

表单:form.php3

include("include/common.inc");

$title = "Feedback";

include("include/header.inc");

?>

NAME="email">



include("include/footer.inc");

?>

处理表单:sendfdbk.php3

include("include/common.inc");

$title = "Feedback";

include("include/header.inc");

if ( $name == "" )

{

// 现在我很讨厌匿名的留言!

echo "Duh ? How come you are anonymous?";

}

elseif ($name == "Your name")

{

// 这个浏览者真是不想透露姓名啊!

echo "Hello ? Your name is supposed to be replaced with

your actual name!";

}

else

{

// 输出一段礼貌的感谢语

echo "

Hello, $name.


Thank you for your feedback. It is greatly appreciated.


Thanking you


$MyName

$MyEmailLink

";

// 最后mail 出去

mail($MyEmail, "Feedback.","

Name : $name

E-mail : $email

Comment : $comment

");

}

include("include/footer.inc");

?>

3.5 简单的站内搜索引擎

PHP 可以调用外部程序。在Unix 环境下我们可以利用程序grep 实现一个简单的搜索引擎。

我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。

include("include/common.inc");

$title = "Search";

include("include/header.inc");

?>

" METHOD="POST">

" SIZE="20" MAXLENGTH="30">

if ( ! empty($searchstr) )

{

// empty()用来检查查询字串是否为空

// 如果不为空,调用grep 查询

echo "


\n";

// 调用grep 对所有文件进行大小写非敏感模式的查询

$cmdstr = "grep -i $searchstr *";

$fp = popen( $cmdstr, "r" ); // 执行命令并输出管道

$myresult = array(); // 存储查询结果

while( $buffer = fgetss ($fp, 4096))

{

// grep 返回这样格式:文件名:匹配字串出现行数

// 因此我们利用函数split()分离处理数据

list($fname, $fline) = split(":",$buffer, 2);

// 我们只输出第一次匹配的结果

if ( !defined($myresult[$fname]))

$myresult[$fname] = $fline;

}

// 现在我们将结果存储在数组中,下面就可以处理并输出了

if ( count($myresult) )

{

echo "

    \n";

    while(list($fname,$fline) = each($myresult))

    echo "

  1. $fname : $fline

  2. \n"; echo "
\n";

}

else

{

// 如果没有查询结果

echo "Sorry. Search on $searchstr

returned no results.
\n";

}

}

?>

include("include/footer.inc");

?>

注释:

PHP_SELF 是PHP 内建的变量。包含当前文件名。

fgets()按行读取文件,最多4096(指定)字符长度。

fgetss()与fgets()相似,只是解析输出的HTML 标记。

split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略":"。

each()是一个数组操作函数,用来更方便的遍历整个数组。

popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。

请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习PHP 而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索四、与数据库链接

通过PHP 你可以轻松的连接到数据库,请求数据并将其显示在你的web 站点中,甚至修改

数据库中的数据。MySQL 是一种很流行的数据库,并且在互联网中有许多有关PHP 与MySQL 的教程。MySQL 是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL 的使用方法了。Oracle 被大量在企业应用中采用,因此我们就利用

Oracle 来介绍PHP 与数据库的连接。我们当然不会提及Oracle 数据库的设计原理,原因是

这已经超出了我们的讨论范围。

PHP 提供了两套函数与Oracle 连接,分别是ORA_和OCI 函数。其中ORA_函数略显陈旧。

OCI 函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP 安装选项应该可以支持两者的使用。

想获得更多有关在Microsoft Windows 平台上安装支持PHP3 的Apache 服务器的知识以及更

多有关Oracle 数据库的知识,请查阅以下URL:https://www.wendangku.net/doc/4524175.html,/~vsbabu/articles/oraphp.html。

4.1 连接

if ($conn=Ora_Logon("user@TNSNAME","password"))

{

echo "SUCCESS ! Connected to database\n";

}

else

{

echo "Failed :-( Could not connect to database\n";

}

Ora_Logoff($conn);

?>

以上代码使用TNSNAME(在你的tnsnames.ora 文件中指明)定义的Oracle 数据库名称、用

户名称和密码连接数据库。在成功连接的基础上,ora_logon 函数返回一个非零的连接ID 并

储存在变量$conn 中。

4.2 查询

假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子:

/*

* 连接数据库并执行查询

*/

function printoraerr($in_cur)

{

// 检查Oracle 是否出错

// 如果存在错误则显示

// 当指针被激活时每次请求Oracle 后调用该函数

if(ora_errorcode($in_cur))

echo "Oracle code - ".ora_error($in_cur)."\n";

return;

}

/** 主程序*/

if (!($conn=ora_logon("user@TNSNAME","password")))

{

echo "Connection to database failed\n";

exit;

}

echo "Connected as connection - $conn
\n";

echo "Opening cursor ...
\n";

$cursor=ora_open($conn); printoraerr($cursor);

echo "Opened cursor - $cursor
\n";

$qry="select user,sysdate from dual";

echo "Parsing the query $qry ...
\n";

ora_parse($cursor,$qry,0); printoraerr($cursor);

echo "Query parsed
\n";

echo "Executing cursor ...
\n";

ora_exec($cursor); printoraerr($cursor);

echo "Executed cursor
\n";

echo "Fetching cursor ...
\n";

while(ora_fetch($cursor))

{

$user=ora_getcolumn($cursor,0); printoraerr($cursor);

$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor);

echo " row = $user, $sysdate
\n";

}

echo "Fetched all records
\n";

echo "Closing cursor ...
\n";

ora_close($cursor);

echo "Closed cursor
\n";

echo "Logging off from oracle...
\n";

ora_logoff($conn);

echo "Logged off from oracle
\n";

?>

(译者注:以上代码段缺少注释,请读者参考PHP Manual 的Oracle 数据库函数部分)

4.3 显示结果

以下代码演示了怎样查询数据库并将结果输出:

function printoraerr($in_cur, $conn)

{

// 检查Oracle 是否出错

// 如果存在错误则显示

// 当指针被激活时每次请求Oracle 后调用该函数

// If it encountered an error, we exit immediately

if(ora_errorcode($in_cur))

{

echo "Oracle code - ".ora_error($in_cur)."
n";

ora_logoff($conn);

exit;

}

return;

}

function exequery($w_qry,$conn)

{

$cursor=ora_open($conn); printoraerr($cursor,$conn);

ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn);

ora_exec($cursor); printoraerr($cursor,$conn);

$numrows=0;

$w_numcols=ora_numcols($cursor);

// 显示头部

echo "

WIDTH=\"100%\"

BORDER=\"0\"

CELLSPACING=\"1\" CELLPADDING=\"2\">

\n";

for ($i=0;$i<$w_numcols;$i++)

{

$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT";

echo"\t

ALIGN=$align>".ora_columnname($cursor,$i)."\n";

}

echo "\n";

while(ora_fetch($cursor))

{

echo "\n";

for ($i=0;$i<$w_numcols;$i++)

{

$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT";

V ALIGN=TOP

if(ora_columntype($cursor,$i)=="LONG")

echo "

".

ora_getcolumn($cursor,$i)."

\n";

else

echo "".ora_getcolumn($cursor,$i)."\n"; printoraerr($cursor,$conn);

}

$numrows++;

echo "\n";

}

if ($numrows==0)

echo "Query returned no records \n";

else

{

echo "\n";

echo"

ALIGN=RIGHT>Count\n";

echo "$numrows\n";

echo "\n";

}

echo "\n";

ora_close($cursor);

return;

}

// 主程序

if(!($conn=ora_logon("user@SID","password")))

{

相关文档