php课程总结.docx
《php课程总结.docx》由会员分享,可在线阅读,更多相关《php课程总结.docx(20页珍藏版)》请在冰豆网上搜索。
![php课程总结.docx](https://file1.bdocx.com/fileroot1/2023-1/21/04f8b2b5-25a6-4c78-968e-e92aec9d0107/04f8b2b5-25a6-4c78-968e-e92aec9d01071.gif)
php课程总结
一、时间和地点:
每周四上午在F311上课。
二、课程内容:
通过这段时间的学习,我对PHP中的MySQL数据库有了一定的理解。
由于以前没有基础,在老师讲课的过程开始有点费尽,尽量记了一些。
首先学习了一些定义:
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司。
目前MySQL被广泛地应用在Internet上的中小型网站中。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
数据(Data)是对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。
在日常生活中,人们直接用语言来描述事物;在计算机中,为了存储和处理这些事物,就要将事物的特征抽象出来组成一个记录来描述。
之后,进行数据的编写,知道了数据库的发展史:
人工管理阶段(人力手工整理存储数据)、文件系统阶段(使用磁盘文件来存储数据)、数据库系统阶段、关系型数据库、高级数据库阶段、“关系-对象”型数据库。
再然后学习了数据库的类型:
(1)纯文本数据库:
纯文本数据库是只用空格符、制表符和换行符来分割信息的文本文件。
适用于小型应用,对于大中型应用来说它存在诸多限制:
*只能顺序访问,不能进行随机访问。
*查找数据和数据关系或多用户同时访问进行写操作时非常困难。
(2)关系数据库:
由于纯文本数据库存在诸多局限,所以人们开始研究数据模型,设计各种类型的使用方便的数据库。
在数据库的发展史上,最具影响的数据库模型有:
层次模型、网状模型和关系模型。
其中,关系模型是目前应用最广泛和最有发展前途的一种数据模型,其数据结构简单,当前主流的数据库系统几乎都采用关系模型。
数据库管理系统:
数据库管理系统(DatabaseManagementSystem)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。
它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
MySQl特征:
性能快捷、优化SQL语言、容易使用、多用户支持、可移植性和开放源代码、遵循国际标准和国际化支持、为多种编程语言提供API。
*mysql命令:
mysql命令
mysql-hhost_name-uuser_name–ppassword
*h:
当连接MySQL服务器不在同台主机时,填写主机名或IP地址
*u:
登录MySQL的用户名
*p:
登录MySQL的密码
*注意:
密码如果写在命令行的时候一定不能有空格。
如果使用的系统为linux并且登陆用户名字与MySQL的用户名相同即可不用输入用户名密码,linux默认是以root登陆,windows默认用户是ODBC
mysql程序常用命令:
选定默认数据库:
usedbname;显示所有数据库:
showdatabases;显示默认数据库中所有表:
showtables;放弃正在输入的命令:
\c;显示命令清单:
\h;退出mysql程序:
\q;查看MySQL服务器状态信息:
\s
接着我们讲了数据库基础知识,在此课中我们了解了数据库:
数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库
档案柜=数据库
抽屉=表
文件=记录
一、数据库的组成以及功能
1、SQL语法组成:
DML(DataManipulationLanguage数据操作语言)
——查询、插入、删除和修改数据库中的数据;
——SELECT、INSERT、UPDATE、DELETE等;
DCL(DataControlLanguage数据控制语言)
——用来控制存取许可、存取权限等;
——GRANT、REVOKE等;
DDL(DataDefinitionLanguage数据定义语言)
——用来建立数据库、数据库对象和定义其列
——CREATETABLE、DROPTABLE、ALTERTABLE等
功能函数
——日期函数、数学函数、字符函数、系统函数等
2、MysQl数据库增删改查:
数据库的操作:
增、删、改、查
增createdatabasename、删dropdatabasename、查showdatabases
改没有修改数据库的语句、可以修改数据库的名字
Myisan直接进入mysqldata文件夹进行修改、Innodb不可以改名,只能重建
几个重要的数据库:
Informatio_schema存储数据库的各种信息用户信息,列表信息,字符集信息等等….
Mysql用户权限信息
Test仅供用户使用的测试数据库,可以随意使用
Cluster服务器数据集,不可以删除
Phpmyadminmysql图形管理软件的一种web
3、数据表的操作
Use数据库名;
增createtable表名(字段名字段类型[约束条件],字段名字段类型[约束条件],。
。
。
)
删droptable表名
改
查showtables
4、数据类型种类:
*数值型
分为整型和浮点型
*整型:
可以由十进制和十六进制表示
整数由数字序列组成,如:
1,100。
由十六进制表示方法:
0x且后面加1—9和A—F的任意数字或字母,并且0x中的X不能大写。
*浮点型:
浮点数由一个数字加一个小数点再加上一个数字组成。
两个数字序列不能同时为空。
数值列的完整性约束
(1)AUTO_INCREMENT
自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。
值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1的值,一个表中最多能有一个有此属性的列。
对于想使用此属性的列应该定义为NOTNULL,并定义为PRIMARYKEY或者定义为UNIQUE键。
举例:
createtablet(idintauto_incrementnotnullprimarykey);
(2)UNSIGNED
无符号,此属性禁用负值,将数值的取值范围从零开始。
举例:
createtablet(numtinyint,num2tinyintunsigned);
(3)NULL和NOTNULL
默认为NULL,即插入值时没有在此字段插入值时自动填NULL,如果指定了NOTNULL,则必须在插入值时在此字段添入值,不允许插入NULL值。
(4)DEFAULT
可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加DEFAULT后指定值。
(5)ZEROFILL
前导零填充数值类型值以达到列的显示宽度。
举例:
createtabletest2(num1intdefault1,num2intzerofill);
CHAR和VARCHAR类型:
CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。
他们之间的差别在于MySQL处理存储的方式:
CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。
VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。
因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。
5、创建数据库:
建立数据库操作:
语法:
createdatabase数据库名
叙述:
创建一个具有指定名称的数据库。
如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。
例:
建立一个student库。
mysql>createdatabasestudent;
创建表:
建立表操作:
语法:
createtable表名(
*列名1列类型[<列的完整性约束>],
*列名2列类型[<列的完整性约束>],
*......);
叙述:
在当前数据库下新创建一个数据表。
列类型:
表示该列的数据类型。
例:
建立一个表school,其由两列组成,第一列属性为非空,并做为主键,并自增
*createtableschool(
*school_idint(10)notnullauto_incrementprimarykey,
*school_namevarchar(20)
*);
6、主键与外键:
数据表之间的关联/引用关系是依靠具体的主键(primarykey)和外键(foreignkey)建立起来的。
(1)主键:
帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。
主键必须是唯一的
主键应该是紧凑的,因此整数类型比较适合
主键
createtablestudent(
sidintnotnullauto_increment,
namevarchar(20)notnull,
primarykey(sid)
);
(2)外键:
引用另外一个数据表的某条记录。
外键列类型尽可能与主键列类型保持一致
外键列应该加上NOTNULL
外键(自动检查外键是否匹配,仅适用InnoDB)
createtablescore(
cidintnotnullauto_incrementprimarykey,
scoreint,
sidint,
foreignkey(sid)referencesstudent(sid)
);
7、删除数据库或表操作
*删除表操作
语法:
droptable[ifexists]tab_name[,tab_name]...
叙述:
从数据库中删除给定的表。
如果给出ifexists子句,则删除不存在的表不会出错。
*删除数据库操作
语法:
dropdatabase[ifexists]db_name
叙述:
删除给定的数据库。
在删除一个数据库后,它就永远没有了,因此要特别小心。
如果给出ifexists子句,则删除不存在的数据库不会出错。
更改表结构操作:
*语法:
altertable表名action;
*说明:
action可以是如下语句:
*add列名建表语句[first|after列名]
可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列
*addprimarykey(列名)
为表添加一个主键,如果主键已经存在,则出现错误
*addforeignkey(列名)references表名(列名)
为表添加一个外键
*alter列名setdefault默认值
可以更改指定列默认值
举例1:
向people表中添加字段address2,类型为varchar,最大长度为100
*altertablepeopleaddaddress2varchar(100);
8、插入记录操作
*叙述:
如果表名后面没写字段名,则默认是向所有的字段添加值,另外字符串值应该用‘’或“”引号括起来
*举例1:
向people表中添加一条记录:
insertintopeople(name,age)
values(“zhangsan”,20);
多表查询—分类
*连接查询
*同时涉及多个表的查询称为连接查询
*用来连接两个表的条件称为连接条件
*内连接(INNERJOIN)
*外连接
——左外联结(LEFTJOIN)
——右外联结(RIGHTJOIN)
二、算数运算符
(1)用字符串表示的数字在任何可能便于计算的地方都被自动地转换为数字。
当执行转换时,MySQL遵循两个基本规则:
如果第一位是数字的字符串被用于一个算数运算中,那么它被转换为这个数字的值。
如果一个包含字符和数字混合的字符串不能被正确的转换为数字,那么它被转换成0。
(2)比较运算符
比较运算符允许我们对表达式的左边和右边进行比较。
一个比较运算符的结果总是1(真),0(假),或是为NULL(不能确定)。
比较运算符可以用于比较数字和字符串。
数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的BINARY二进制关键字)
在第二章中我们学习到了数据库的连接。
1、mysql连接:
•七剑下天山
//第一贱:
连接数据库
•mysql_connect—打开一个到MySQL服务器的连接
•mysql_pconnect—打开一个到MySQL服务器的持久连接
•//resourcemysql_connect([string$server[,string$username[,string$password[,bool$new_link[,int$client_flags]]]]])(在php手册中有
•//mysql连接:
•//mysql_connect非持久连接,效率较低,对资源消耗小
•//mysql_pconnect持久连接,效率高,消耗大量的资源
•$link=mysql_connect('localhost:
3306','root','root');
•var_dump($link);
//第二贱:
判断连接是否成功
•//第二贱:
判断连接是否成功//mysql_errno—返回上一个MySQL操作中的错误信息的数字编码
•//mysql_error—返回上一个MySQL操作产生的文本错误信息
•//echomysql_errno();正确返回0,错误返回一个正整数,输出最近一次的mysql错误。
//第三贱:
设置字符集
•boolmysql_set_charset(string$charset[,resource$link_identifier])
•//mysql_set_charset—Setstheclientcharacterset
•//boolmysql_set_charset(string$charset[,resource$link_identifier])
•mysql_set_charset('utf8');
//第四贱:
选择数据库
•//mysql_select_db—选择MySQL数据库
•mysql_select_db('company11');
•mysql_select_db—选择MySQL数据库
•说明
•boolmysql_select_db(string$database_name[,resource$link_identifier])
•成功时返回TRUE,或者在失败时返回FALSE.
•mysql_select_db()设定与指定的连接标识符所关联的服务器上的当前激活数据库。
如果没有指定连接标识符,则使用上一个打开的连接。
如果没有打开的连接,本函数将无参数调用mysql_connect()来尝试打开一个并使用之。
//第五贱:
准备并且发送sql语句
•//$sql='select*frombiao';
•//mysql_query($sql)//mysql_query—发送一条MySQL查询
//resourcemysql_query(string$query[,resource$link_identifier])
//第六贱:
判断执行结果,或者遍历结果集
•//增删改的判断
•$result=mysql_query($sql);(放入第五贱)
•if($result&&mysql_affected_rows()){
•echo'执行成功';
•}else{
•echo'执行失败,或者不存在数据';
•}
•$sql="insertintozhiyuan(name,sex,bumen)values('zhou',0,2)";
•$sql="updatezhiyuansetbumen=3wherename='小王'";
•$sql="insertintozhiyuan(name,sex,bumen)values('小王',0,2)";
//第七贱:
万贱归宗*/
之后,学习了面向对象。
1、面对对象技术的基本观点如下:
(1)客观世界由对象组成。
(2)具有相同数据(属性)和操作(方法)的对象可归纳成类。
(3)类可以派生出子类,子类除了继承父类的全部特性外还可以有自己的特性
(4)对象之间的联系通过消息传递(可理解为方法调用)来维系。
假设m1是类Manager的一个实例(或对象),当外界要求把这个对象所代表的那位经理的级别改变为2时,就应以下面的方式向这个对象发出一条消息:
ml.ChangeLevel
(2)消息传递
PHP的WEB技术面向对象是仿造现实对象建立的,他们也有状态和行为。
软件对象在一个或多个变量中维护它的状态。
变量是一个由标识符命名的数据项。
对象用方法实现它的行为。
方法是与一个对象相关联的函数(子过程)。
•对象有二个性质:
状态(state)和行为(behavior)。
•对象是一个封装数据属性和操作行为的实体.
2、面向对象
将相关的变量和方法封装进一个简洁的软件组合是一种简单而强大的思想,它给软件开发人员提供了两个主要的好处:
模块化:
一个对象的源代码可以独立于其他对象的源代码进行编写和维护。
另外,对象很容易地在系统中传递。
你可以将你的自行车对象交给其他人,而它仍然会正常工作。
(重构、代码复用)
隐藏信息:
对象有一个公共接口,其他对象可以使用这个接口与它通信。
对象可以维护私有的信息和方法,可以在任何时候改变这些信息和方法,而不影响依赖于它的其他对象。
你不需要理解你自行车使用的变速齿轮机制就能够使用它。
即是:
封装
3、类
类是一组具有相同数据结构和相同操作对象的集合。
在现实世界中,常常有相同类型的许多对象。
例如,你的自行车只是世界上的许多自行车之一。
用面向对象的术语来说,你的自行车对象是自行车类的一个实例。
自行车有一些共有的状态(当前的变速齿轮、当前的步调、两个轮子)和行为(改变变速齿轮、刹车)。
但是,每辆自行车状态独立于其他自行车状态,也就说每辆自行车的状态可以互不相同。
•functionjia($no1,$no2){
•return$no1+$no2;
•}
•functionjian($no1,$no2){
•return$no1-$no2;
•}
•functioncheng($no1,$no2){
•return$no1*$no2;
•}
•functionchu($no1,$no2){
•return$no1/$no2;
•}
•functionmax(){
•echo'我是最大值';
•}
4、类的成员-字段
(1)、声明字段
php
ClassStaff
{
public$name="lucky";
private$age=25;
}
$a=newstaff();
echo$a->name;
>
(2)使用字段
•与变量不同,使用字段要使用->操作符,而不是美元符号
–$employee=newStaff();
–echo$employee->name;
•当在定义字段的类中引用字段时要使用$this关键字。
$this表示当前类
5、、构造函数
构造函数是类中的一个特殊函数,当使用new操作符创建一个类的实例时,构造函数将会自动调用。
Php5中以__construct()作为构造函数。
而php4中是以将和类名相同的函数作为构造函数。
为了兼容php5先寻找__construct(),如果找不到再寻找以类名命名的构造函数
如果一个类没有构造函数,则调用基类的构造函数
ClassStaff
{
function__construct()//两个下划线
{
echo"调用了构造函数";
}
functionStaff()
{
echo"调用了构造函数2";
}
}
$employee=newStaff();
•//构造方法函数
•//特点,就是在new的时候也就是调用这个壳的时候就进行了调用的方法
•//写法:
php4中只认识一种类名和函数名相同的话,那个函数就是使构造方法
•//php5中类名和函数名相同/__construct()都是构造方法
•//注意:
构造方法在类中只能有一个不要写多个使用PHP4的或者PHP5的两个相同构造方法会报重载错误
•//但是如果一个PHP4的一个PHP5的构造方法就不会报错,但是逻辑有问题
•//构造方法的参数传值,是在调用类的时候()放的就是为构造方法准备的参数//析构方法函数__destruct()
•//特点,析构方法是在调用完之后,自动执行在接收类调用的变量改值的时候/或者页面结束自动启动
•//声明关键字[privateprotectedpublicvar]
6、析构函数
(1)析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
脚本执行结束时,php会撤销内存中的所有对象,因此如果实例化时创建的信息都会保留到内存中,就不需要显式的声明析构函数。
但是如果创建了不那么容易丢失的数据时(例如连接数据库)就应当定制析构函数进行销毁数据。
ClassStaff
{
function__construct()
{
echo"调用了构造函数";
}
function__destruct()
{
echo“调用了析构函数,需要释放和销毁的";
}
}
$employee=newStaff();
(2)类的成员-属性_set()
__set()//两个下划线
php
ClassTest{
public$name="lucky";
var$age=18;
function__set($propname,$propvalue)
{
$this->$propname=$propvalue;
print"ok
";
}
}
$model=newTest();
$model->age=25;
$model->title="English";
echo"
";
print"age:
".$model->age."
";
echo"
";
print"title:
".$model->title."
";
>可用来验证某个属性是否存在或增加新的属性
7、控制对类的成员访问
(1)public:
在任何位置都可以读取和修改这个成员变量或者调用这个方法。
这个修饰符在外部代码使用,由给定类中的代码使用,或者在扩展给定类的功能