Web学习记录<二>PHP语法和MySQL小结
来源:互联网 发布:windows程序设计下载 编辑:程序博客网 时间:2024/05/16 11:07
离职有一个好,就是有大把的时间自己支配。从昨天夜里开始啃《php和mysql web开发》这本书,将不熟悉的地方都敲了一遍,并记录了一些笔记。如下是章节的笔记汇总。
第一篇(1~8涨) PHP基础部分
这一篇主要介绍了PHP中,非常常用的用知识点。这一章中,关于面向对象的概念介绍没有花很多时间去看,同C++有很多类似的地方,正则的用法,同Python中的正则也是类似,具体的用法做除了区分。总的来说,语言上的东西不算多,可以很快入门。
1. 第一二章笔记
1.语法
php的语法不多少什么了,和C太像了。。面向对象的思想又有点C++的味道,但没有C++那么强大。
第一章很快的过了一遍,直接写了一遍他的代码。
2. 代码中要学习的地方
如下几点是需要积累到的:
A. $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; //获取文档的根目录
除此之外,还有另外两种方法可以获取到根目录:
$_DOCUMENT_ROOT
$HTTP_SERVER_VARS['DOCUMENT_ROOT']
B. $date = date('H:i, jS F Y'); //获取php处理请求的具体时间
C. @ $fp = fopen("$DOCUMENT_ROOT/../orders/orders.txt", 'ab');
源码中的fopen()函数前,有一个@ 符号,是告诉PHP阻止所有该函数调用所产生的错误,最好是使用异常处理机制。另外,fopen()函数支持在一个远程位置打开文件,所以文件的名称甚至可以是一个http地址,不过在使用http地址作为打开参数时,必须在目录名的最后加上结束线,比如:
http://www.example.com/
下面是错误的方法:
http://www.example.com
D. 以只读方式打开order.txt
@$fp = fopen("$DOCUMENT_ROOT/../orders/orders.txt", 'rb');
判断何时读完文件:
while(!feof($fp))
E. 每次读取一行数据
fgets(),fgetss(),fgetcsv 三者具体的用法,查找php的用户手册
F. 读取整个文件
readfile(),fpassthru(),file()
更多关于文件的操作,有:
查看文件是否存在,file_exists()
确定文件大小:filesize()
删除一个文件:unlink()
php中的这些关于文件的操作大部分都沿袭了C语言的风格,更复杂的用法,应该会配合正则表达来进行。
G. 锁 flock() ----->当多个用户试图同时访问某一文件时,会出现竞争资源的情况。这里类似于操作系统 中的互斥锁。
解决上述问题,使用数据库的话,就非常方便了。
2. 3-4章笔记
1.之前在网上下了一个模板,thinkPHP的,那个人是这样声明数组的:
$Goverment = [];
结果报错。这好像是Python的声明方法才对,php数组声明应该是
$Goverment = array();
不管怎么讲,第一种声明是最好的。。。
2.使用不同索引的数组
如题,就是数组的索引不再只是数字了,还可以是字符或字符串,例如:
$price = array('Apple'=>100,'Pork'=>200);
此时,price['Apple'] 的值是等于100的。
A. foreach可用来遍历使用不是数字作为索引值的数组。例如:
foreach($price as $key =>$value)
echo $key.'=>'.$value.'</br>';
这里需要学习的是,$变量之后的 . 表示的是加法,如上是表示字符串相加,下面列子:
$a = 'hello';
$b = 'world';
echo $a.'++++++'.$b;
出来的结果是 hello++++++world
B. each()和list()搭配使用来遍历
each函数会返回当前数组的元素,并将下一个数组元素作为当前元素。list()函数可以用来将一个数组分解为一系列的值,下列代码实现的结果同上述A中的一样:
while(list($product,$price)=each($price))
echo “$product - $price</br>”;
如果需要脚本两次使用上列的数组,使用reset($price),each()所指向的数组元素又回到了最初的位置。
3.多维数组
$product = array( arry('Tri','Tires',100),
arry('Apple','APPLE',200),
arry('Juice','JUICE',400)
);
上述的多维数组可以使用数字索引来对数组成员进行访问:
for($row = 0;$row<3;$row++)
{
for($col = 0;$col <3;$col++)
{
echo '| '.$product[$row[col]];
}
}
但上述代码不直观和优雅,使用非数字下标数组来表示,会更有趣一点:
$product = array( arry('code'=>'Tri',
'description'=>'Tries'
'price'=>100;
)
arry('code'=>'Apple',
'description'=>'APPLE'
'price'=>200;
)
arry('code'=>'Juice',
'description'=>'JUICE'
'price'=>400;
)
);
这里可以结合each和list来对这个二维的数组进行访问:
for($row = 0;$row <3;$row++)
{
while(list($key,$value)=each($product[$row]))
{
echo “| $value”;
}
echo '| </br> ';
}
4. 数组排序
asort()函数会根据数组的每个元素值进行排序。
ksort()函数会根据数组的关键字来进行排序。
asort()和ksort()函数都是按照升序来排的,他们每个函数还对应了一个降序的函数:
arsort()和krsort()
5. 将文件载入数组
<?php
//读取整个文件到一个数组中.
//
文件中的每行作为一个数组元素
$orders=file("$DOCUMENT_ROOT/../orders/orders.txt");
// count thenumber of orders in the array
$number_of_orders = count($orders);
if($number_of_orders == 0) {
echo"<p><strong>No orders pending.
Pleasetry again later.</strong></p>";
}
for ($i=0;$i<$number_of_orders; $i++) {
//split upeach line
$line =explode("\t", $orders[$i]); //用制表副来分割每个数组元素
// keep onlythe number of items ordered
$line[1] =intval($line[1]);
//使用intcal函数从字符串中提取数字
$line[2] = intval($line[2]);
$line[3] =intval($line[3]);
// outputeach order
echo"<tr>
<td>".$line[0]."</td>
<td align=\"right\">".$line[1]."</td>
<td align=\"right\">".$line[2]."</td>
<td align=\"right\">".$line[3]."</td>
<td align=\"right\">".$line[4]."</td>
<td>".$line[5]."</td>
</tr>";
}
echo"</table>";
?>
6. 对数组每一个元素执行任意函数——array_walk()
7.统计数组元素个数: count(),sizeof(),array_count_values()
3. 4-8章笔记
本章的主要内容是使用正则表达式。关于操作字符串的函数,这里列出清单,知道其用途即可,在具体使用时再查找相关手册。
1.字符串的格式化
A. 去除开始位置和结束位置的空格 trim(),参数是字符串变量
B. nl2br()用XHTML中的</br>来代替字符串中的换行符
C. 改变字符串中字符的大小写Strtoupper()将字符串改为大写
Strtoplower()----->小写
Ucfirst()------------>首字符大写
D. 专用于转义字符串的函数,在将字符串写入到数据库之前,使用addslashes()
在用户要显示数据库中的内容之前,使用stripslashes()函数
2.字符串连接和分割
A. explode() 使用举例:
$email = “peng@198.com”;
$email_array=explode('@',$email);
得到的数组{'peng','198.com'}
使用implode()函数实现上述中相反的效果:
$email_array=array('peng','198.com');
$email = implode('@',email_array);
B. strtok() 从字符串主哦功能取出一些片段来进行处理
3. 查找和替换
A.在字符串中查找字符串:strstr(),strchr().stristr()
B.查找字符串的位置:strop()
C.替换子字符串: str_replace(),substr_replace()
4. 正则表达式
A.重复:
+ ------->1次或更多
* -------> 0次或更多
B.子表达式
()* ------->至少这些字符串中的一个需要精确匹配,例如:
(very)* large =====> vreylarge,very very large,very very very large
(very ){1,3} ======> very ,veryvery ,very very very
C.其余基础查找手册
5. 使用正则来匹配
ereg(string pattern,string search,array[match]) 和eregi(...),后者不区分大小写
6.使用正则来替换字符串
ereg_replace(string pattern,string replacement,string search);
7. 使用正则分割字符串
split(string pattern,string search[])
第五章 代码重用与函数编写
1.include,require等的使用
类似与C/C++...
2.怎么写函数
...略
3.函数参数
形参和实参...
作用域...
第六章 面向对象的PHP
参考C++的实现,概念一样
注意以下几点:
1.继承类 使用extends关键字
2.多重继承 目前没用过。。。
3.关键字 new clone
4.迭代器和迭代
使用forech()方法通过循环方式来取出一个对象的所有属性,就像数组方式一样(私有成员变量能访问么?)
如果要实现更加复杂的迭代,需要实现一个迭代器,也就是在类里面实现一个IteratorAggreate接口,并且定义一个能够返回迭代类实例的getIterator()方法。
如下为一个实现迭代器的例子:
class objectIterator implements Iterator()
{
private $obj;
private $count;
private $currentIndex;
function __construct($obj)
{
$this->obj = $obj;
$this->count =count($this->obj->data);
}
//rewind将内部数据指针复位到开始的地方
//valid 判断当前位置是否还存在更多的数据
//key 返回数据指针的值
//value 返回当前值
//next 移动数据指针
function rewind()
{
$this->currentIndex = 0;
}
function valid()
{
return $this->currentIndex <$this->count;
}
function key()
{
return$this->currentIndex;
}
function current()
{
return$this->obj->data[$this->currentIndex];
}
function next()
{
$this->currentIndex++;
}
}
class Object implements IteratorAggregate
{
public $data =array();
function__construct($in)
{
$this->data = $in;
}
functiongetIterator()
{
return newObjectIterator($this);
}
}
$myObject = new Object(array(2, 4, 6, 8, 10));
$myIterator = $myObject->getIterator();
//获取迭代函数
for($myIterator->rewind(); $myIterator->valid(); $myIterator->next())
{
$key =$myIterator->key();
$value =$myIterator->current();
echo$key." => ".$value."<br />";
}
5. 注意PHP中几个双下划线的魔术函数
6. 使用反射Reflection (反射)API
通过访问已有的类和对象来找到类和对象的结构和内容。这里,要结合一个魔术函数__toString()来将一个完整的类实现内容打印出来。(__toString()函数可以打印一个类)
第七章 异常处理
1.
try
{
//要执行的函数
//执行的函数中,需要手动抛出异常,用如下方法来抛出:
// throw new Exception('message',code)
}
catch()
{
//处理异常,
}
2.Exception类
这个类需要两个参数,一个错误消息和一个错误代码,除此之外,该类还需要实现如下内置函数:
getCode() 返回传递给构造函数的代码
getMessage() 返回传递给构造函数的消息
getFile() 返回产生异常的代码文件的完整路径
getLine() 返回代码中产生异常的代码的行号
getTrace() 返回一个包含了产生异常的代码回退路径的数组
getTraceAsString() 返回与getTrace一样的消息,被格式化为字符串
_toString() 允许简单的显示一个Exception对象
可以继承的Exception类,但是上述的基本方法的实现是不能被重载的,_toString()函数可以被重载,因此我们可以自定义异常的显示方式:
class myException extends Exception
{
function _toString()
{
return“.....fuuucccckkkk....”
}
}
try
{
throw new myException('A terribleerror has occurred',42);
}
catch(myException $m)
{
echo $m;
}
第二篇 MySQL基础
这一篇主要是介绍MySQL的基础知识,有了这些基础知识,后面阅读源代码时,看着才不会那么陌生。由于之前在Qt中经常要用到Sqlite,对SQL的基本语句不算完全陌生,但是深入的东西不多,这方面的知识在后面的项目实践中回过头来补充。总的来说,这一篇的内容让我熟悉了使用php来操作数据库。
1. 设计Web数据库
1. 关系数据库的专业术语和概念
表格
列
行
值
键
主键和外键的区别
2. 模式与关系(确定主键与外键)
3. 设计web数据库的几个要素
考虑建模的实际对象
避免保存冗余数据
使用原子列值,也就是对每一行的每个属性只存储一个数据
选择有意义的键,确保键值的唯一性
2. 创建Web数据库
1.使用Mysql
A.这里记录下遇到的问题,新手。。。
Mysql的的每个命令之间都需要用;来进行分离,如果漏掉了分号,那么将会出现一个持续箭头:
mysql> grant select
->
这个符号表示期待更多输入,直到有一个分号被检测到为止。
B. 登录mysql
mysql -h 主机地址 -u 数据库用户名 -p密码
注意,-p和密码之间不许要空格
C. 创建数据库
mysql> create database book;
D. 设置用户权限
为用户设置密码不是必须的,但是要建立一个Web数据库,最好为每一个网络应用程序建立一个用户。
最少权限原则
E. 创建用户 GRANT 命令
GRANT和REVOKE命令分别用来授予和取消Mysql用户的权限,这些权限分为如下四个等级:
全局
数据库
表
列
Mysql中存在3个基本类型的权限:使用与一般用户的权限,适用于管理员的权限和几个特定的权限。对于用户而言,应该只赋予他们访问数据库和表的权限。
具体语法如下:[]内的字句为可选的
GRANT privileges [columns]
ON item
TO user_name[IDENTIFIED BY 'password']
[REQUEST ssl_options]
[WITH [GRANT | limit_options]]
要创建一个管理员,需要执行如下的命令
mysql>grant all
-> on *
-> to peng identified by '123'
-> with grant option;
以上命令授予了用户名为peng,密码为123的用户使用数据库所有权限,并允许他向其他人授予权限。
如果不希望用户在系统中存在,可以执行下列方式进行撤销:
mysql> revoke all privileges,grant
-> from peng;
如果要进一步创建一个没有任何权限的常规用户:
mysql> grant usage
-> on books .*
-> to sally identified by “1234”;
通过如下语句,可对sally进行进一步的权限分配:
mysql> grant select ,insert,update,delete,index,alter,creat,drop
-> on books.*
-> to sally;
下面是对sally的权限进行缩减:
mysql> revoke alter,creat,drop
-> on books.*
-> to sally;
mysql> use dbname;
mysql> show dbname;
mysql> describe dbname;
其他创建表格相关的指令都需要在端口上自己实现,此处不做记录,只是实践一遍,加深理解。
2. 为数据库创建索引
CREATE INDEX index_name
ON table_name
3. 选择列数据类型
A.数字类型
B.日期和时间类型
C.字符串类型
小结:这一章主要是学习数据可如何创建用户,数据库以及表。下面是学习如何与数据库进行交互
3.使用MySql数据库
1. 插入
INSERT [INTO] table [(column1,column2,...)] VALUS (value1,value2,...)
使用举例:
在上一章中建立的books table中的customers表中添加一条记录,可以输入如下命令:
mysql> insert into customers values(NULL,'Julice Smith','25 Oakstreet','Airport Weet');
如果只是针对一些指定的列添加内容,可以使用如下语句:
mysql> insert into customers (name,city) values('Melissa Jones','Nar NarGoon North');
2.获取数据
A.SELECT 语句
举例:
select name,city
from customers;
在多表关联时使用别名:
select c.name
from customers as c,orders as o,order_item as oi,books as b
where c.coustomerid = o.customerid
and o.orderid = oi.orderid
and oi.isbn = b.isbn
and b.title like '%Java';
以特定的顺序来获得数据
select name,city
from customers
order by name (name后面可以加asc表示升序,desc表示降序);
选组要返回的行
select name
from customers
limit 2,3;
B. 使用子查询
select customerid,amount
from orders
where amount = (select max(amount) from orders);
子查询操作副:
ANY select c1 from t1 where c1> any(select c1 from t2);
IN select c1 from t1 where in(select c1 from t2);
SOME select c1 from t1 where c1> some(select c1 from t2);
ALL select c1 from t1 where c1> all(select c1 from t2);
4. 更新数据库
update books
set price = price*1.1
update books
set address ='250 Olsens Road'
where customerid = 4;
5.创建后修改数据表
A.更改列的数据类型
alter table customers
modify name char(70) not null;
B.添加一列
alter table orders
add tax float(6,2) after amount;
C.删除一列
alter table orders
drop tax;
6. 删除数据库中的记录
delete from customers
where customerid = 5;
7. 表的删除
drop table tablename;
8. 删除整个数据库
drop database databasename;
第十章 使用MySql数据库
这章主要是填删查改操作。
1. 插入
INSERT [INTO] table[(column1,column2,...)] VALUS (value1,value2,...)
使用举例:
在上一章中建立的bookstable中的customers表中添加一条记录,可以输入如下命令:
mysql> insert into customersvalues(NULL,'Julice Smith','25 Oak street','Airport Weet');
如果只是针对一些指定的列添加内容,可以使用如下语句:
mysql> insert into customers(name,city) values('Melissa Jones','Nar Nar Goon North');
2.获取数据
A.SELECT 语句
举例:
select name,city
from customers;
在多表关联时使用别名:
select c.name
from customers as c,orders aso,order_item as oi,books as b
where c.coustomerid = o.customerid
and o.orderid = oi.orderid
and oi.isbn = b.isbn
and b.title like '%Java';
以特定的顺序来获得数据
select name,city
from customers
order by name (name后面可以加asc表示升序,desc表示降序);
选组要返回的行
select name
from customers
limit 2,3;
B. 使用子查询
select customerid,amount
from orders
where amount = (select max(amount)from orders);
子查询操作副:
· ANY select c1 from t1 where c1 > any(select c1 from t2);
· IN select c1 from t1 where in (select c1 from t2);
· SOME select c1 from t1 where c1 > some(select c1 from t2);
· ALL select c1 from t1 where c1 > all(select c1 from t2);
4. 更新数据库
update books
set price = price*1.1
update books
set address ='250 Olsens Road'
where customerid = 4;
5.创建后修改数据表
A.更改列的数据类型
alter table customers
modify name char(70) not null;
B.添加一列
alter table orders
add tax float(6,2) after amount;
C.删除一列
alter table orders
drop tax;
6. 删除数据库中的记录
delete from customers
where customerid = 5;
7. 表的删除
drop table tablename;
8. 删除整个数据库
drop database databasename;
- Web学习记录<二>PHP语法和MySQL小结
- php和mysql web开发学习记录
- PHP和MySQL Web开发读书笔记二
- PHP和MySQL Web开发(二)
- php&mysql学习小结
- 【MySQL学习】MySQL PHP 语法
- PHP和MySQL WEB开发学习笔记
- PHP学习笔记《PHP和MySQL web 开发》
- 《PHP和MySQL WEB开发》第一、二章笔记
- [php学习二]基本语法练习二
- PHP学习记录_基本语法
- mysql学习记录(二)
- 《PHP和MySQL Web开发》学习笔记:1~3章
- 《PHP和MySQL Web开发》学习笔记:4~5章
- PHP和MySQL Web开发学习笔记介绍
- PHP 学习笔记(二)基础语法
- PHP学习笔记二(基础语法)
- [php学习二]基本语法练习一
- Pow(x, n)
- Roads not only in Berland CodeForces 25D 并查集
- Symmetric Tree
- Timus OJ 1057 数位dp
- 离线安装 Android Studio 更新
- Web学习记录<二>PHP语法和MySQL小结
- Linux命令之查看系统信息
- POJ Function Run Fun
- Android学习 - android上实现编解码
- YTU 2891: E--围栏
- 我也要写博客
- 【计算几何】POJ 1269
- 哈理工 oj 2189 节点的连接
- Servlet自学第18讲:获取浏览器html参数