第1章 PHP快速入门
PHP脚本在Web服务器上被解释和执行,这与在用户机器上的Web浏览器中解释并执行的JavaScript及其他客户端技术是不同的。
PHP标记
PHP标记有4种不同的风格可供我们使用
(1)<?php echo '<p>Order processed.</p>' ; ?>
它是PHP推荐的标记风格,服务器管理员不能禁用这种风格的标记,因此可以保证在所有服务器上使用这种风格的标记。
(2)<? echo '<p>Order processed.</p>' ; ?>
这是简短风格,你必须在配置文件中启用short_open_tag选项,或者启用短标记选项编译PHP。不推荐使用这种风格的标记,因为这种风格在许多环境的默认设置中已经不支持
(3)<script language='php'> echo '<p>Order processed.</p>' ;</script>
这种标记风格是最长的
(4)<% echo '<p>Order processed.</p>' ; %>
这种标记风格与Active Server Pages(ASP)或ASP.net的标记相同。如果在配置设定中启用了asp_tags选项,就可以使用它。
在PHP中,分号是用来分隔语句的。
注释
PHP支持C、C++和Shell脚本风格的注释。
(1)/* ... */
(2)//....
(3)#...
表单变量
访问表单变量有3种风格:
(1)简短 e.g. $tireqty
但是需要将register_globals配置选项设置为on,这种风格的标记容易产生安全问题的错误,也就是为什么不推荐的原因
(2)中等 e.g. $_POST['tireqty']
推荐
(3)冗长 e.g.HTTP_POST_VARS[‘tireqty’]
已经被弃用
字符串的连接
点号是字符串的连接符,它可以将几段文本连接成一个字符串。在双引号中,变量名将被变量值所替代,而在单引号中,变量名称,或者任何其他文本者会不经修改而发送给浏览器。
标识符
PHP定义了一些简单的规则:
(1)标识符可以是任何长度,而且可以由任何字母、数字、下划线组成。
(2)标识符不能以数字开始
(3)标识符区分大小写。对于这个规则,函数名称是个例外
(4)一个变量名称可以与一个函数名称相同
PHP的特性之一就是不要求在使用变量之前声明变量。
变量类型
PHP支持如下所示的基本数据类型
(1)Integer
(2)Float
(3)String
(4)Boolean
(5)Array
(6)Object
(7)NULL(空),没有赋值、已经被重置或者被赋值为特殊值NULL的变量就是NULL类型的变量
(8)resource(资源),特定的内置函数将返回resource类型的变量,它们都代表外部资源
PHP是一种弱类型语言,当变量被赋值时,PHP将“自动地”获得输入的数据类型。
常量
可以使用define函数定义常量。常量和变量之间的一个重要不同点在于引用一个常量的时候,它前面并没有$符号.除了可以定义常量外,PHP还预定义了许多常量。了解这些常量的简单方法就是运行phpinfo()函数。
作用域
(1)内置超级全局变量可以在脚本的任何地方使用和可见
(2)常量,一旦被声明,将可以在全局可见
(3)在一个脚本中声明的全局变量在整个脚本是可见的,但不是在函数内部
(4)函数内部使用的变量声明为全局变量时,其名称与全局变量名称一致。
超级全局变量
$GLOBALS,所有全局变量数组
$_SERVER,服务器环境变量数组
$_GET,通过GET方法传递给该脚本的变量数组
$_POST,通过POST方法传递给该脚本的变量数组
$_COOKIE,cookie变量数组
$_FILES,与文件上传相关的变量数组
$_ENV,环境变量数组
$_REQUEST,所有用户输入的变量数组,包括$_GET,$_POST,$_COOKIE所包含的输入内容
$_SESSION,会话变量数组
操作符
(1)恒等操作符===(三个等于号),只有当恒等操作符两边的操作数相等并且具有相同的数据类型时,其返回值才为true。
(2)错误抑制操作符@,可以在任何表达式前面使用,即任何有值的或者可以计算出值的表达式前面
(3)执行操作符``,它是一对反单引号,PHP将试着将反单引号之间的命令当作服务器端的命令行来执行
declare
declare(directive)
{
//block
}
这种结构用来设置代码块的执行指令,也就是,关于后续代码如何运行的规则。
第2章 数据的存储和检索
存储数据有两种基本方法:保存到普通文件,或者保存到数据库中。
第3章 使用数组
e.g.
$products = array('Tires','Oil','Spark Plugs');
array()实际上是一个语言结构,而不是一个函数。
可以用如下方式初始化关联数组:
$products = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4);
第5章 代码重用和函数编写
使用一条require()或include()语句,可以将一个文件载入到PHP脚本中。二者唯一的不同是在于函数失败后,require()函数将给出一个致命的错误,而include()只是给出一个警告。
函数定义使用关键字function,另外PHP不支持函数重载。
第6章 面向对象的PHP
使用关键字class。
第8章 设计Web数据库
关系数据库由关系组成,这些关系通常称为表格。一个典型的Web数据库事务包含下列步骤:
(1)用户的Web浏览器发出HTTP请求,请求特定Web页面。例如,该用户以HTML表单的形式,要求搜索图书。搜索结果网页称为result.php
(2)Web服务器收到result.php请求,获致该文件,并将它传到PHP引擎,要求它处理
(3)PHP引擎开始解析脚本。脚本中有一条连接数据库的命令,还有执行一个查询的命令,PHP打开通向MySQL数据库的链接,发送适当的查询
(4)MySQL服务器接受数据库查询并处理。将结果返回PHP引擎
(5)PHP引擎完成脚本运行,通常,这包括将查询结果格式化成HTML格式。然后再将输出的HTML返回Web服务器
(6)Web服务器将HTML发送到浏览器。这样用户就可看到搜索结果
第9章 创建Web数据库
SQL语句不区分大小写,但数据库和表的名称则区分大小写。每个命令都用分号(;)分开,分号将告诉MySQL执行这个命令。如果漏掉了这些分号,MySQL将不会执行这些命令。
登录到MySQL
mysql -h hostname -u username -p
-h命令选项用于指定所希望连接的主机,即运行MySQL服务器的机器。如果正在该MySQL服务器所运行的机器上运行该命令,可以忽略该选项和hostname参数。
创建数据库和用户
create database dbname;
MySQL权限
GRANT和REVOKE命令分别用来授予和取消MySQL用户的权限,这些权限分4个级别。它们分别是
(1)全局
(2)数据库
(3)表
(4)列
MySQL中存在3个基本类型的:适用于赋予一般用户的权限、适用于赋予管理员的权限和几个特定的权限。
权限 | 应用于 | 描述 |
---|---|---|
select | 表,列 | 允许用户从表中选择行 |
insert | 表,列 | 允许用户在表中插入新行 |
update | 表,列 | 允许用户修改现在表里行中的值 |
delete | 表 | 允许用户删除现存表的行 |
index | 表 | 允许用户创建和拖动特定表索引 |
alter | 表 | 允许用户改变现存表的结构,例如: 可添加列、重命令列或表、修改列的数据类型 |
create | 数据库,表 | 允许用户创建新数据库或表 |
drop | 数据库,表 | 允许用户删除数据库或表 |
权限 | 描述 |
---|---|
create temporary tables | 允许管理员在create table语句中使用temporary关键字 |
file | 允许将数据库文件读入表,或从表读入文件 |
lock tables | 允许使用lock tables语句 |
process | 允许管理中查看属于所有用户的服务器进程 |
reload | 允许管理员查看属于所有用户的服务器进程 |
replication client | 允许复制主机和从机上使用show status |
replication slave | 允许复制从服务器连接到主服务器。 |
show databases | 允许使用show databases语句查看所有数据库列表。 |
shutdown | 允许管理呐关闭MySQSL服务器 |
super | 允许管理员关闭属于任何用户线程 |
权限 | 描述 |
---|---|
all | 所有权限 |
usage | 通常在以后会授予该用户更多的权限 |
GRANT
grant privileges [columns]
on item
to user_name [identified by password]
[require ssl_options]
[with [grant option|limit_options]]
(1)privileges应该是由逗号分开的一组权限。
(2)colums可以用它对每一列指定权限,也可以使用单列的名称或者用逗号分开的一组列的名称
(3)item是新权限所应用于的数据库或表,可以将项目指定为*.*,而将权限应用于所有数据库。
(4)WITH GRANT OPTION表示允许指定的用户向别人授予自己的拥有的权限
权限存储在名为mysql的数据库中的5个系统表中,这些表分别是mysql.user mysql.db mysql.host mysql.table_priv mysql.columns_priv。作为grant命令的替代,可以直接修改这些表。
REVOKE
revoke privileges [(columns)]
on item
from user_name
如果已经给出了with grant options子句,可以按如下方式撤销它:
revoke all privileges ,grant
from user_name
使用数据库
use dbname;
创建数据库表
create table tablename (colums)
columns用逗号分开的列名称,每一列应该有一个名字,该名字后面紧跟其数据类型
例如:
create table customers(
customerid int unsigned not null auto_increment primary key,
name char(50) not null,
address char(100) not null,
city char(30) not null
);
show
(1)show tables;查看数据库中的所有表
(2)show databases;查看所有的数据库
如果要查看某个选定表的详细信息,可以使用describe命令。
创建 索引
create [unique|fulltext] index index_name
on table_name (index_column_name [(length) [asc|desc],... ])
(1)length,允许指定只有该字段的前length个字符将被索引。
选择列数据类型
MySQL中有3种基本的数据列数据类型:数字、日期和时间、字符串。
(1)数字类型
数字类型分为整形和浮点型两类
类型 | 取值范围 | 存储空间(单位为字节) | 描述 |
---|---|---|---|
TINYINT[(M)] | -127~128或0~255 | 1 | 非常小的整数 |
BIT | TINYINT的同义词 | ||
BOOL | TINYINT的同义词 | ||
SMALLINT[(M)] | -31768~32767或0~65536 | 2 | 小型整数 |
MEDIUMINT[(M)] | -8388608~8388607或0~16777215 | 3 | 中型整数 |
INT[(M)] | -2^31~-(2^31)-1或0~(2^32)-1 | 4 | 一般整数 |
INTEGER[(M)] | INT的同义词 | ||
BIGINT[(M)] | -2^63~-(2^63)-1或0~(2^64)-1 | 8 | 大型整数 |
类型 | 取值范围 | 存储空间 (以字节为单位) | 描述 |
---|---|---|---|
FLOAT(精度) | 取决于精度 | 可变 | 用于指定单精度和双精度浮点数 |
FLOAT[(M,D)] | 4 | 单精度浮点数,等同于FLOAT(4), 但是指定显示宽度和小数位数 | |
DOUBLE[(M,D)] | 8 | 双精度浮点数,等同于FLOAT(8),但是指定显示宽度和小数 位数 | |
DOUBLE | 同上 | 与DOUBLE[(M,D)]同义 | |
PRECISION[(M,D)] | 与DOUBLE[(M,D)]同义 | ||
REAL[(M,D)] | 与DOUBLE[(M,D)]同义 | ||
DECIMAL[(M[,D])] | 可变 | M+2 | 浮点数,以char存储,范围取决于显示宽度M |
NUMERIC[(M,D)] | 同上 | DECIMAL同义词 | |
DEC[(M,D)] | 同上 | DECIMAL同义词 | |
FIXED[(M,D)] | 同上 | DECIMAL同义词 |
(2)日期和时间类型
类型 | 取值范围 | 描述 |
---|---|---|
DATE | 1000-01-01 9999-12-31 | 一个日期,以YYYY-MM-DD格式显示 |
TIME | -838:59:59 838:59:59 | 一个时间,以HH:MM:SS形式显示。 |
DATETIME | 1000-01-0100:00:00 9999-12-31 23:59:59 | 日期和时间,以YYYY-MM-DD HH:MM:SS格式显示 |
TIMESTAMP[(M)] | 1970-01-01 00:00:00 2037年的某个时间 | 时间标签,在处理报告中有意义。范围的最高值取决于UNIX的限制 |
YEAR[(2/4)] | 70-69(1970~2069) 1901~2155 | 年份,可以指定2位数字或4位数字的格式。各有不同的范围 |
(3)字符串
类型 | 描述 |
---|---|
[NATIONAL] CHAR(M) [BINARY|ASCII|UNICODE] | 固定长度为M的字符中,其中M的取值为0~255. NATIONAL关键字指定了应该使用的默认字符集。虽然这是MySQL 的默认值,但包含它的原因是因为这是ANSI SQL标准的一部分。 |
[NATIONAL] VARCHAR(M) [BINARY] | 除了变长,其他与上一项相同 |
类型 | 最大长度 | 描述 |
---|---|---|
TINYBLOB | 255 | 小二进制大对象(BLOB)字段 |
TINYTEXT | 255 | 小TEXT字段 |
BLOB | 65535 | 常规大小BLOB字段 |
TEXT | 65535 | 常规大小TEXT字段 |
MEDIUMBLOB | (2^24)-1 | 中型大小BLOB字段 |
MEDIUMTEXT | (2^24)-1 | 中型大小TEXT字段 |
LONGBLOB | (2^32)-1 | 长BLOB字段 |
LONGTEXT | (2^32)-1 | 长TEXT字段 |
类型 | 集合中最大值 | 描述 |
---|---|---|
ENUM('value1','value2',...) | 65535 | 该类型的列只可以容纳所列值之一或NULL |
SET('value1','value2',...) | 64 | 该类型的列可以容纳一组值或者NULL |
第10章 使用MySQL数据库
插入数据
insert [into] table [(column1,column2,column3,...)] values
(value1,value2,value3,...);
也可以一次将多行插入到一个表中。而每一行应该出现在自己的括号里,每组括号之间要用逗号分开。
从数据库中获取数据
select [options] items
[into file_details]
from tables
[where conditions]
[group by group_type]
[having where_definition]
[order by order_type]
[limit limit_criteria]
[procedure proc_name(arguments)]
[lock_options]
;
运算符 | 名称 | 例子 | 描述 |
---|---|---|---|
= | 测试两个值是否相等 | ||
> | |||
< | |||
>= | |||
<= | |||
!=或<> | |||
is not null | 测试字段是否包含一个值 | ||
is null | 测试字段是否不包含一个值 | ||
between | 测试一个值是否大于或等于最小值并小于或等于最大值 | ||
in | 测试一个值是否在特定的集合里 | ||
not in | 测试一个值是否不在特定的集全里 | ||
like | 模式匹配 | 用简单的MySQL模式匹配检查一个值是否匹配于一个模式 | |
not like | 模式匹配 | 检查一个值是否不匹配于一个模式 | |
regexp | 常规表达式 | 检查一个值是否不匹配一个常规表达式 |
like使用简单的SQL模式匹配。模式可以由常规文本加上匹配任何数量的字符“%”和只匹配一个字符的"_"组成,REGEXP关键词用于正则表达式的匹配。MySQL使用POSIX正则表达式。
(1)简单的双表关联
表名之间的逗号等价于输入inner join或cross join,这是一种类型的关联,有时也称为完成关联或表的笛卡尔乘积。
(2)查找不匹配行
在MySQL中,实现此类查询最简单的方法就是使用左关联。左关联是在两个表之间指定的关联条件下匹配的数据行。如果右边的表中没有匹配的行,结果中就会增加一行,该行右边的列为NULL。
(3)order by
可以根据出现 在select子名中的一行或多列对数据行进行排序。
(4)
名称 | 描述 |
---|---|
avg(列) | 指定列的平均值 |
count(项目) | 如果指一列,这将给出本列中非空值的列数 |
min(列) | |
max(列) | |
std(列) | 标准方差 |
stddev(列) | 与上相同 |
sun(列) | 指定列的所有值的和 |
(5)limit
它可以用来指定输出中哪些行应该返回,它有两个参数,起始行号与返回行数
(6)子查询
子查询是一个嵌套在另一个查询内部的查询,MySQL很长时间没有采纳子查询的主要原因之一在于,多数查询可以在没有子查询的情况下完成。
更新数据库记录
update [low_priority] [ignore] tablename
set column1 = expression1, column2=expresion2,...
[where condition]
[order by order_criteria]
[limit number]
其基本思想是更新名为tablename的表,设置每列的名称为适当的表达式。可以通过where子句限制update到特定的行,也可以使用limit子句限制受影响的总行数。order by通常只在limit子句的连接中使用。
创建后修改表
alter table [ignore] tablename alteration [,alteration ...]
语法 | 描述 |
---|---|
add [column] column_description [first|after column] | 在指定地方添加新列(如果没指定,就在最后一列后面)。 注意column_description需要名称和类型与在create语句 中的名称和类型一致 |
add [column] (column_descrption, column_description,...) | 在表结尾添加一个或多个新的列 |
add index[index](column,...) | 在指定的一列或几列添加一个表的索引 |
add [constraint [symbol]] primary key(column,...) | 指定一列或几列为表主键。constraint是针对使用外键的表 |
add unique[constraint constraint[symbol]] [index] (column,...) | 在指定的一列或几列添加一个唯一的表索引 |
add [constraint [symbol]] foreign key [index](index_col,...) [reference_definition] | 为一个InnoDB表添加外键 |
alter [column] column {set default value|drop default} | 添加或删除特定列的默认值 |
change [column] column new_column_description | 改变名为column的列,添加所列出的描述。 |
modify [column] column_description | 类似于change,可以用来修改列类型,而不是类名称 |
drop [column] column | 删除指定的列 |
drop primary key | 删除主索引 |
drop index index | 删除指定的索引 |
drop foreign key key | 删除外键 |
disable keys | 禁用索引更新 |
enable keys | 开启索引更新 |
rename [as] new _table _name | 重新命名一个表 |
order by col_name | 以特定顺序的行重新创建表 |
convert to character set cs collate c | 将所有文本列转换成指定字符集和排序 |
[default] character set cs collate c | 设置默认的字符集和排序 |
discard tablespace | 删除InnoDB表的可能表空间文件 |
import tablesapce | 为InnoDB表重新创建可能的表空间文件 |
table_options | 允许重新设置表选项 |
最后欢迎大家访问我的个人网站: 1024s