1、PHP框架 <?php //这是PHP程序代码 ?>
2、变量
(1)命名规则
变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
注意:PHP变量和语句都区分大小写。
(2)没有声明变量的语句,变量在第一次赋值时被创建。 <?php $txt="Hello world!"; $x=5; $y=10.5; ?>
(3)PHP是弱类型语言,PHP会根据变量的值,自动把变量转换为正确的数据类型。
(4)变量作用域(四种):local、global、static、parameter
local:局部变量,在PHP函数内部声明的,仅能在函数内部访问
global:全局变量,在所有函数外部定义的变量,拥有全局作用域;要在一个函数中访问一个全局变量,需要使用global关键字
$x=5; // 全局变量
function myTest()
{ $y=10; // 局部变量
echo "
测试函数内变量:
";
echo “变量 x 为: $x”;
echo " ";
echo “变量 y 为: $y”;
} //仅能输出$y的值,不能输出x的值,因为它是全局变量没有函数中使用global关键字
myTest();
echo "
测试函数外变量:
";
echo “变量 x 为: $x”;
echo " ";
echo "变量 y 为:
y
"
;
/
/
仅
能
输
出
y"; //仅能输出
y";//仅能输出x,不能输出$y
?>
$x=5;
$y=10;
function myTest()
{ global
x
,
x,
x,y;
y
=
y=
y=x+$y;
/*等同于:
G
L
O
B
A
L
S
[
′
y
′
]
=
GLOBALS['y']=
GLOBALS[′y′]=GLOBALS[‘x’]+$GLOBALS[‘y’];
*/}
myTest();
echo $y; // 输出 15
?>
PHP将所有全局变量储存在一个名为$GLOBALS[index]的数组中,index保存变量名称;这个数组可以在函数内部访问,也可以直接用来更新全局变量。
static:当你希望某个函数的局部变量在函数完成时不要被删除,可以使用static关键字。但其仍是局部变量。
parameter:参数是通过代码调用给函数,作为函数的一部分声明。<?php
function myTest($x)
{ echo $x;
}
myTest(5);
?>
3、echo语句和print语句
两者均为输出语句。
echo可以输出一个或多个字符串,没有返回值,输出速度比print快;
print只允许输出一个字符串,返回值总为1。<?php
echo "
PHP 很有趣! ";//文字是标题格式 echo "Hello world! ";
echo "我要学 PHP! ";
echo “这是一个”, “字符串,”, “使用了”, “多个”, “参数。”;//可以输出多个字符串
?><?php
print "
PHP 很有趣! "; print "Hello world! ";
print “我要学习 PHP!”;//只允许输出一个字符串
?><?php
$txt1=“学习 PHP”;
$txt2=“RUNOOB.COM”;
$cars=array(“Volvo”,“BMW”,“Toyota”);
/使用print和echo都可以/
print $txt1;
print " ";
print "在 $txt2 学习 PHP ";
print " ";
print “我车的品牌是 {$cars[0]}”;
?>
4、字符串的定义——PHP EOP
使用规则:
必须后接分号
EOF可以用任意其他字符代替,只需保证结束标志与开始标志一致
结束标志必须顶格独占一行,前后不能衔接任何空白和字符
开始标志可不带引号或带单双引号,不带引号和带双引号用于解释内嵌变量和转义符号,带单引号则不解释
当内容内嵌引号时,无需转义<?php
$name=“runoob”;
$a= <<
“abc”$name
“123”
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
注意,以<<
5、数据类型
String, Integer, Float, Boolean, Array, Object, NULL
(1)String字符串:放在单双引号都可以
(2)Integer整型:可以是整数或负数;三种格式——十进制、十六进制(0x)、八进制(0)<?php
$x = 5985;
var_dump($x);//输出int(5985)
echo " "; //换行
$x = -345; // 负数
var_dump($x);//int(-345)
echo " ";
$x = 0x8C; // 十六进制数
var_dump($x);//int(140)
echo " ";
$x = 047; // 八进制数
var_dump($x);//int(39)
?>
var_dump() 函数返回变量的数据类型和值。
(3)Float浮点型:带小数,或指数形式(e表示10的几次方)
(4)Boolean布尔型
(5)Array数组<?php
$cars=array(“Volvo”,“BMW”,“Toyota”);
var_dump($cars);
?>
输出:array(3) { [0]=> string(5) “Volvo” [1]=> string(3) “BMW” [2]=> string(6) “Toyota”}
(6)Object对象:对象数据类型必须声明
首先用class关键字声明类对象(属性、方法),在类中定义数据类型,然后在实例化中使用数据类型<?php
class Car
{ var $color;
function Car($color=“green”) { $this->color = $color;//this就是只想当前对象实例的指针,不指向任何其他对象或类
}
function what_color() { return $this->color;
}
}
?>
(7)NULL空值:无值无类型
6、常量
设置常量常使用define() 函数,函数语法为:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
其中,name为常量名称;value为常量的值;case_insensitive为可选,若为TRUE则大小写不敏感,默认为敏感。
常量默认为全局变量。
7、字符串操作
(1)并指运算符 . ——将两个字符串值连接在一起<?php
$txt1=“Hello world!”;
$txt2=“What a nice day!”;
echo $txt1 . " " . $txt2;
?>
(2)strlen() 函数:返回字符串长度(字符数)
(3)strpos() 函数:用于在字符川内查找一个字符或一段指定文本,找到返回第一个匹配字符位置,未找到返回FALSE<?php
echo strpos(“Hello world!”,“world”);
?>
8、运算符
(1)
$x=10; $y=6; $a=“hello”;
x
/
x/
x/y=1.6666666666667
var_dump(intp(10,3)); //输出int(3)
a
.
=
"
w
o
r
l
d
"
;
/
/
a.=" world"; //
a.="world";//a=“hello world”
==等于
===绝对等于,值和类型都相同
(2)数组运算<?php
$x = array(“a” => “red”, “b” => “green”);
$y = array(“c” => “blue”, “d” => “yellow”);
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>
(3)三元运算符:(expr1)?(expr2):(expr3)
当expr2=expr1时,可省略为(expr1)?:(expr3),也可以表示(expr1)??(expr3)
(4)优先级
// 优先级: && > = > and
// 优先级: || > = > or
$a = 3;
$b = false;
$c = $a or $b;
var_dump($c); // 这里的 $c 为 int 值3,而不是 boolean 值 true
$d = $a || $b;
var_dump($d); //这里的 $d 就是 boolean 值 true
?>
二、高级教程
一, PHP - 多维数组:
$cars = array(
array("huawei","12","11"),
array("meizu","23","12"),
array("iphone","12","4")
);
$title = array("手机总共有:","个,已经卖出去了","个!");
for($i=0;$i<count($cars);$i++)//和c语言遍历数组的方法很像
{
for($j=0;$j<count($cars[$i]);$j++)
{
echo $cars[$i][$j];
echo $title[$j];
}
echo "\n";
}
?>````
输出:
huawei手机总共有:12个,已经卖出去了11个!
meizu手机总共有:23个,已经卖出去了12个!
iphone手机总共有:12个,已经卖出去了4个!
#### 二、 PHP 日期和时间
date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。
下面列出了一些常用于日期的字符:
· d - 表示月里的某天(01-31) D-表示当前这天的英文星期简写
· m - 表示月(01-12) M-表示当前月的英文缩写
· Y - 表示年(四位数) y-表示年(后两位数)
· 1 - 表示周里的某天 L-返回0
其他字符,比如 "/","." 或 "-" 也可被插入字符中,以增加其他格式。
<?php
echo"今天是 " . date("YYYY/m/d") ."\n"; //2017201720172017/06/26 由此可见不能用js中yyyy-mm-dd的形式
echo"今天是 " . date("Y.m.d") . "\n"; //2017.06.26
echo"今天是 " . date("Y-M-D") . "\n"; //17-Jun-Mon
echo"今天是 " . date("l") . "\n"; //Monday 星期全称
echo"今天是 " . date("L") . "\n"; //0
?>
获得简单的时间
下面是常用于时间的字符:
date_default_timezone_set("Asia/Shanghai"); //设置时区
echo date_default_timezone_get(oid);//获取当前时区
· h - 带有首位零的 12 小时小时格式 H-24小时格式
· i - 带有首位零的分钟 I-0
· s - 带有首位零的秒(00 -59) S-返回th我也不知道是什么鬼
· a - 小写的午前和午后(am 或 pm) A-返回大写格式:AM或PM
echo"现在是 " . date("h:i:sa") . "\n"; //现在是 02:15:44pm
echo"现在是 " . date("H:I:SA") . "\n"; //现在是 14:0:thPM
通过 PHP mktime() 创建日期
date() 函数中可选的时间戳参数规定时间戳。如果您未规定时间戳,将使用当前日期和时间
语法
mktime(hour,minute,second,month,day,year)
$d=mktime(9,12, 31, 6, 10, 215) ;
echo"创建日期是 " . date("Y-m-d h:i:sa", $d) ."\n"; //在date方法里面传参则取的是参数中的时间,如果不传的话则取的是当前时间
通过 PHP strtotime() 用字符串来创建日期
PHP strtotime() 函数用于把人类可读的字符串转换为Unix 时间。
$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
如果输入了它不能识别的字符串则保存为 1970-01-01 12:00:00am
计算两个时间段内的时间所有的周六
<?php
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks",$startdate);
while ($startdate < $enddate) {
echo date("M d", $startdate),"\n";
$startdate = strtotime("+1 week", $startdate); //在$startdate基础上加一个礼拜,你还可以加1天,1个月,1年
}
?>
计算距离某一天还有多长时间
<?php
$d1=strtotime("2017-7-30");
$d2=ceil(($d1-time())/60/60/24);
echo "距离十二月三十一日还有:" . $d2 ." 天。";
?>
#### 三、 PHP Cookies
cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
创建cookie
setcookie() 函数用于设置 cookie。
注释:setcookie() 函数必须位于 <html> 标签之前。
语法
setcookie(name, value, expire, path, domain);
在下面的例子中,我们将创建名为 "user" 的 cookie,把为它赋值 "Alex Porter"。我们也规定了此 cookie 在一小时后过期:
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用setrawcookie() 取而代之)。
取回 Cookie 的值
PHP 的 $_COOKIE 变量用于取回cookie 的值。
<?php
// Print a cookie
echo $_COOKIE["user"];
// A way to view all cookies
print_r($_COOKIE);
?>
删除 cookie当删除 cookie 时,您应当使过期日期变更为过去的时间点。
<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
如果浏览器不支持 cookie 该怎么办?
如果您的应用程序涉及不支持cookie 的浏览器,就不得不采取其他方法在应用程序中从一张页面向另一张页面传递信息。一种方式是从表单传递数据(有关表单和用户输入的内容,稍早前我们已经在本教程中介绍过了)。
下面的表单在用户单击提交按钮时向"welcome.php" 提交了用户输入:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>
取回"welcome.php" 中的值,就像这样:
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
#### 四、 PHP Sessions
PHP Session 变量
当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在cookie 中,亦或通过 URL 进行传导。
开始 PHP Session
在您把用户信息存储到 PHPsession 中之前,首先必须启动会话。
注释:session_start() 函数必须位于 <html> 标签之前:
<?php session_start(); ?>
<html>
<body>
</body>
</html>
上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID。
存储 Session 变量
存储和取回session 变量的正确方法是使用 PHP$_SESSION 变量:
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>
输出:
Pageviews=1
在下面的例子中,我们创建了一个简单的 page-view 计数器。isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则我们创建 "views" 变量,并把它设置为 1:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
终结 Session
如果您希望删除某些session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量:
<?php
unset($_SESSION['views']);
?>
您也可以通过session_destroy() 函数彻底终结 session:
<?php
session_destroy();
?>
注释:session_destroy() 将重置 session,您将失去所有已存储的session 数据。
五、 PHP 错误处理
错误处理方法:
· 简单的 "die()" 语句
· 自定义错误和错误触发器
· 错误报告
为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
假如文件不存在,您会得到类似这样的错误消息:
File not found
比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。
不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。
创建自定义错误处理器
创建一个自定义的错误处理器,可以在PHP 中发生错误时调用该函数。
该函数必须有能力处理至少两个参数(error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及error context):
语法
error_function(error_level,error_message,
error_file,error_line,error_context)
参数
描述
error_level
必需。为用户定义的错误规定错误报告级别。必须是一个值数。
参见下面的表格:错误报告级别。
error_message
必需。为用户定义的错误规定错误消息。
error_file
可选。规定错误在其中发生的文件名。
error_line
可选。规定错误发生的行号。
error_context
可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。
创建错误处理函数
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
现在,我们已经创建了一个错误处理函数,我们需要确定在何时触发该函数。
Set ErrorHandler
PHP 的默认错误处理程序是内建的错误处理程序。我们打算把上面的函数改造为脚本运行期间的默认错误处理程序。
可以修改错误处理程序,使其仅应用到某些错误,这样脚本就可以不同的方式来处理不同的错误。不过,在本例中,我们打算针对所有错误来使用我们的自定义错误处理程序:
set_error_handler("customError");
由于我们希望我们的自定义函数来处理所有错误,set_error_handler() 仅需要一个参数,可以添加第二个参数来规定错误级别。
<?php
//定义错误处理函数
function customError($errno, $errstr)
{
echo "rror: [$errno] $errstr";
}
//设置错误处理函数
set_error_handler("customError");
//触发错误
echo($test);
?>
可能的错误类型:
· E_USER_ERROR - 致命的用户生成的run-time 错误。错误无法恢复。脚本执行被中断。
· E_USER_WARNING - 非致命的用户生成的run-time 警告。脚本执行不被中断。
· E_USER_NOTICE - 默认。用户生成的run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。
例子
在本例中,如果"test" 变量大于 "1",则发生E_USER_WARNING 错误。如果发生了 E_USER_WARNING,我们将使用我们的自定义错误处理程序并结束脚本:
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script";
die();
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
错误记录
通过 E-Mail 发送错误消息
function customError($errno, $errstr)
{
echo "Error: [$errno] $errstr\n";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"526369948@qq.com","From: 526369948@qq.com");
}
#### 六、 PHP 异常处理
异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。
当异常被触发时,通常会发生:
· 当前代码状态被保存
· 代码执行被切换到预定义的异常处理器函数
· 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
我们将展示不同的错误处理方法:
· 异常的基本使用
· 创建自定义的异常处理器
· 多个异常
· 重新抛出异常
· 设置顶层异常处理器
Try, throw 和 catch
要避免上面例子出现的错误,我们需要创建适当的代码来处理异常。
正确的处理程序应当包括:
1. Try - 使用异常的函数应该位于"try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
2. Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
3. Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象
让我们触发一个异常:
``
<?php
//创建可抛出一个异常的函数
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//在 "try" 代码块中触发异常
try
{
checkNum(2);//如果抛出异常则执行catch中的语句,这里就不接着往下执行了
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//捕获异常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>``
上面代码将获得类似这样一个错误:
Message: Value must be 1 or below
创建一个自定义的 Exception 类
创建自定义的异常处理程序非常简单。我们简单地创建了一个专门的类,当 PHP 中发生异常时,可调用其函数。该类必须是 exception 类的一个扩展。
这个自定义的exception 类继承了 PHP 的 exception 类的所有属性,您可向其添加自定义的函数。
我们开始创建exception 类:
<?php
class customException extends Exception //extends 相当于继承关键字
{
public function errorMessage() //定义了自己的报错函数
{
//error message 在继承的类中,可以访问基类的方法
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example...com";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
这个新的类是旧的exception 类的副本,外加 errorMessage() 函数。正因为它是旧类的副本,因此它从旧类继承了属性和方法,我们可以使用 exception 类的方法,比如 getLine() 、getFile() 以及 getMessage()。
多个异常
可以为一段脚本使用多个异常,来检测多种情况。
可以使用多个if..else 代码块,或一个 switch 代码块,或者嵌套多个异常。这些异常能够使用不同的 exception 类,并返回不同的错误消息:
``
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'
return $errorMsg;
}
}
$email = "someone@example.com";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
catch (customException $e)
{
echo $e->errorMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>``
重新抛出异常
有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 "catch" 代码块中再次抛出异常。
``
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = $this->getMessage().' is not a valid E-Mail address.';
return $errorMsg;
}
}
$email = "someone@example.com";
try
{
try
{
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
//throw exception if email is not valid
throw new Exception($email); //抛出Exception异常
}
}
catch(Exception $e) //捕获Exception异常
{
//re-throw exception
throw new customException($email); //抛出customException异常
}
}
catch (customException $e) //捕获customException异常
{
//display custom message
echo $e->errorMessage();
}
?>``
设置顶层异常处理器 (Top LevelException Handler)
set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。
``
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>``
在上面的代码中,不存在 "catch" 代码块,而是触发顶层的异常处理程序。应该使用此函数来捕获所有未被捕获的异常。
异常的规则
· 需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
· 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
· 使用多个 catch 代码块可以捕获不同种类的异常。
· 可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。
简而言之:如果抛出了异常,就必须捕获它。
#### 七、 PHP Include 文件
服务器端包含 (SSI) 用于创建可在多个页面重复使用的函数、页眉、页脚或元素。
PHP include 和 require 语句
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。
include 和 require 语句是相同的,除了错误处理方面:
· require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
· include 只生成警告(E_WARNING),并且脚本会继续
语法
include 'filename';
或
require 'filename';
PHP include 实例
例子 1
假设我们有一个名为 "footer.php" 的标准的页脚文件,就像这样:
<?php
echo "<p>Copyright ? 2006-" . date("Y") . " W3School.com.cn</p>";
?>
如需在一张页面中引用这个页脚文件,请使用 include 语句:``
<html>
<body>
<h1>欢迎访问我们的首页!</h1>
<p>一段文本。</p>
<p>一段文本。</p>
<?php include 'footer.php';?>
</body>
</html>``
例子 2
假设我们有一个名为 "menu.php" 的标准菜单文件:
```<?php
echo '<a href="/index.asp">首页</a> -
<a href="/html/index.asp">HTML 教程</a> -
<a href="/css/index.asp">CSS 教程</a> -
<a href="/js/index.asp">JavaScript 教程</a> -
<a href="/php/index.asp">PHP 教程</a>';
?>```
网站中的所有页面均使用此菜单文件。具体的做法是(我们使用了一个 <div> 元素,这样今后就可以轻松地通过 CSS 设置样式):
```<html>
<body>
<div class="menu">
<?php include 'menu.php';?>
</div>
<h1>欢迎访问我的首页!</h1>
<p>Some text.</p>
<p>Some more text.</p>
</body>
</html>
例子 3
假设我们有一个名为 "vars.php" 的文件,其中定义了一些变量:
<?php
$color='银色的';
$car='奔驰轿车';
?>
然后,如果我们引用这个 "vars.php" 文件,就可以在调用文件中使用这些变量:
```<html>
<body>
<h1>欢迎访问我的首页!</h1>
<?php
include 'vars.php';
echo "我有一辆" . $color . $car "。";
?>
</body>
</html>``
PHP include vs. require
require 语句同样用于向 PHP 代码中引用文件。
不过,include与 require 有一个巨大的差异:如果用 include 语句引用某个文件并且 PHP无法找到它,脚本会继续执行:
如果我们使用 require 语句完成相同的案例,echo 语句不会继续执行,因为在 require 语句返回严重错误之后脚本就会终止执行:
注释:
请在此时使用 require:当文件被应用程序请求时。
请在此时使用 include:当文件不是必需的,且应用程序在文件未找到时应该继续运行时。
# PHP对数据库的相关操作
#### 一、PHP从Mysql数据库读取数据
语法:SELECT * FROM table_name (*代表全部字段,也可指定多个字段用,隔开)
例:从 myDB 数据库的 MyGuests 表读取了 id, firstname 和 lastname 列的数据并显示在页面上
#### 1、面向过程
```<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// 输出数据
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
mysqli_close($conn);
?>```
#### 2、面向对象
```<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql); //取出结果集并赋给复制给变量 $result
if ($result->num_rows > 0) { //判断返回的数据
// 输出数据
while($row = $result->fetch_assoc()) { //返回多条数据,将结合集放入到关联数组并循环输出
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
$conn->close();
?>```
#### 3、PDO+预处理
例:选取了 MyGuests 表中的 id, firstname 和 lastname 字段,并放到 HTML 表格中
```<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
$stmt->execute();
// 设置结果集为关联数组
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>```
# 二、PHP Mysql中Where字句
语法:SELECT column_name(s)
FROM table_name
WHERE column_name operator value
```<?php
$con=mysqli_connect("localhost","username","password","database");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons
WHERE FirstName='Peter'");
while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}
?>```
//输出:Peter Griffin
# 三、PHP Mysql中Order By
ORDER BY 关键词用于对记录集中的数据进行排序。ORDER BY 关键词ASC默认对记录进行升序排序。降序排序,使用 DESC 关键字。
语法:SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
例:选取 “Persons” 表中存储的所有数据,并根据 “Age” 列对结果进行排序
```<?php
$con=mysqli_connect("localhost","username","password","database");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons ORDER BY age");
while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br>";
}
mysqli_close($con);
?>```
//输出:
//Glenn Quagmire 33
//Peter Griffin 35
# 四、PHP Mysql中Update
语法:UPDATE table_name
SET column1=value, column2=value2,…
WHERE some_column=some_value
我们创建了一个名为 "Persons" 的表
````<?php
$con=mysqli_connect("localhost","username","password","database");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}
mysqli_query($con,"UPDATE Persons SET Age=36
WHERE FirstName='Peter' AND LastName='Griffin'");
mysqli_close($con);
?>```
更新后,“Persons” 表如下所示:
# 五、PHP Mysql中Delete
DELETE 语句用于从数据库表中删除行。
语法:DELETE FROM table_name
WHERE some_column = some_value
删除 “Persons” 表中所有 LastName=‘Griffin’ 的记录
```<?php
$con=mysqli_connect("localhost","username","password","database");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}
mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'");
mysqli_close($con);
?>````
删除后,“Persons” 表如下所示:
# 六、PHP 数据库ODBC
ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。
1、创建ODBC连接
通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。
这是创建到达 MS Access 数据库的 ODBC 连接的方法:
①在控制面板中打开管理工具图标。
②双击其中的数据源(ODBC)图标。
③选择系统 DSN 选项卡。
④点击系统 DSN 选项卡中的添加。
⑤选择Microsoft Access Driver。点击完成。
⑥在下一个界面,点击选择来定位数据库。
⑦为数据库起一个数据源名(DSN)。
⑧点击确定。
请注意,必须在您的网站所在的计算机上完成这个配置。如果您的计算机上正在运行 Internet 信息服务(IIS),上面的指令将会生效,但是如果您的网站位于远程服务器,您必须拥有对该服务器的物理访问权限,或者请您的主机提供商为您建立 DSN。
2、连接到ODBC
odbc_connect() 函数用于连接到 ODBC 数据源。该函数有四个参数:数据源名、用户名、密码以及可选的指针类型。
odbc_exec() 函数用于执行 SQL 语句。
//创建了到达名为 northwind 的 DSN 的连接,没有用户名和密码。然后创建并执行一条 SQL 语句
$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
3、取回记录
odbc_fetch_row() 函数用于从结果集中返回记录。如果能够返回行,则函数返回 true,否则返回 false。
该函数有两个参数:ODBC 结果标识符和可选的行号
odbc_fetch_row($rs)
1
4、从记录中取回字段
odbc_result() 函数用于从记录中读取字段。该函数有两个参数:ODBC 结果标识符和字段编号或名称。
下面的代码行从记录中返回第一个字段的值
$compname=odbc_result($rs,1);
1
下面的代码行返回名为 “CompanyName” 的字段的值
$compname=odbc_result($rs,"CompanyName");
1
5、关闭ODBC连接
odbc_close() 函数用于关闭 ODBC 连接。
odbc_close($conn);
1
6、ODBC实例
首先创建一个数据库连接,接着创建一个结果集,然后在 HTML 表格中显示数据。
```<html>
<body>
<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
{
exit("连接失败: " . $conn);
}
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{
exit("SQL 语句错误");
}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs))
{
$compname=odbc_result($rs,"CompanyName");
$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body>
</html>```
|