php基础知识

date_default_timezone_set("Asia/Shanghai");javascript

date_default_timezone_set("PRC");//设置时区  PRC 中华人民共和国php

Eclipse快捷键:html

alt+shift+r:重命名java

ctrl-/:对一行或多行注释或取消注释mysql

ctrl+o:快速outlinec++

ctrl+shift+r:打开资源程序员

屏蔽警告:error_reporting(E_ALL & ~E_NOTICE);//  ~ 除了web

“select * from user where username=’$username’”ajax

Mysql修改密码:mysql>SET PASSWORD FOR root@localhost=PASSWORD(‘newpassword’);正则表达式

header("Content-type: text/html; charset=utf-8");

修改php配置文件位置:在Apache配置文件中输入PHPIniDir "D:/Appserv/php5/php.ini"

Iconv(string in_charset,string out_charset,string str)转换字符串字符集

Js跳转

echo '<script language=javascript>window.location.href="login.php"</script>';

//0.5s后跳转 
echo "<meta http-equiv=\"refresh\" content=\"0.5;url=$url\">"; 

 

 

 

 

 

指令分隔符“分号”

语句分两种:一种是功能执行语句:后面必定要加分号

                                与?>最近一条语句能够不加分号,建议都加分号

            一种是结构定义语句:后面必定不要加分号

程序中的注释

1.//单行注释

2. /* */多行注释,多行注释中不能再包含多行注释

3. #脚本注释

4. /** */文档注释

做用:写过不适合的代码注释

      写帮助文档

      调试程序

注意:注释要写在代码的上面或右边

Php语言标记

<?php ?> 推荐使用这个,若是?>以后就是脚本结束能够不加,建议不要加

<? ?>

<?=$var?>

<%%>

<script language=”php”></script>

变量的声明

若是在用到数据时,须要用到屡次就声明为变量使用

$变量名=值

强类型语言中(C,Java)声明变量必定要先指定类型;php是弱类型语言,变量的类型由存储的值决定

isset()判断变量是否存在;unset()删除一个变量

eg:字符串声明:1.单引号和双引号均可以声明字符串

                2.声明的字符串没有长度限制

                3.在双引号的字符串中,既能够直接解析变量,又能够直接使用转义字符

                4.在单引号的字符串中,不能够直接解析变量,也不可使用转义字符(能够转义单引号自己,也能够转义转义字符”\”)

                5.在双引号中不能再使用双引号,在单引号中不能使用单引号

                6.最好使用单引号

                7.定界符声明 可使用双引号 声明大量字符串

变量的命名

  1. 变量前必定要使用“$”,声明和使用都要有这个符号
  2. 不能以数字开头
  3. 不能使用php的运算符号+  - * / % &
  4. Php可使用系统关键字做为变量名
  5. 注意:php变量区分大小写(只有变量和常量区分大小写,其余不区分)
  6. 变量名称必定要有意义,可使用英文单词,也可使用汉语拼音(变量的命名风格:$aaaBbbCcc)

可变变量

一个变量的变量名能够动态设置和使用

eg:$one=”###”;

   $two=”one”;

   echo $two.”<br>”;//输出one

   echo $$two.”<br>”;//输出###,$two是one

变量的引用赋值

使用一个“&”符号加到将要赋值的变量前面(原变量)

Eg:$one=10;

$two=&$one;//two的值为10

$one=100;//two的值也变为100

变量的类型

Php中共有8种类型:4种标量:整型:int  integer(整数的最大值,2的32次方)

                             布尔型:bool boolean(false的状况:false、0、0.000、””、” ”、null、”0”、array())

                             浮点型:float double real

                             字符串:string

                    2种复合类型:

                             数组:array

                             对象:object

                    2种特殊类型:

                             资源类型:resource

                             空类型:null

Var_dump(变量或值);//既能够查看变量或值得类型,又能够看数据

常量的声明与使用

  1. 常量是一个简单值的标识符
  2. 常量定义后不能再改变它的值,也不能使用unset()取消
  3. 常量能够不用理会变量范围的规则而在任何地方均可以定义和访问
  4. 常量使用define(”常量名”,值)
  5. 常量声明时在声明和使用都不用“$”
  6. 常量名称习惯都使用大写
  7. 常量的值只能用标量类型(int,float,bool,string)
  8. 常量必定要在声明时就给值
  9. Define(“常量”);

预约义常量和魔术常量(常量值不固定)

魔术常量:__FILE__(本文件)  __LINE__(行数)  __FUNCTION__(使用哪一个函数)  PHP__VERSION__(php版本)eg:echo __FILE__.”<br>”;

类型之间的相互转换

强制转换:settype(变量,类型);//类型int integer float double real bool boolean string array object

这个函数将原变量的类型改变,在赋值前使用(类型)的形式,不会改变原变量的

类型

$变量=intval(变量或值);

$变量=floatval(变量或值);

$变量=stringval(变量或值);

注意:整型在内存中占4个字节,浮点型在内存中占8个字节(可能会出现溢出)

自动转换:最经常使用方式,由于这种开发时不用去管理类型,变量会根据运行环境自动转换

与变量和类型有关的一些经常使用函数

isset();判断一个变量是否存在,值若是是null,也表示空

unset();删除一个变量

empty();// “ “ null

setType();设置类型

getType();获得类型

变量类型测试函数

is_bool();

is_int()  is_integer()  is_long()

is_string()

is_float()  is_double() is_real()

is_array()

is_object()

is_resource()

is_null();

is_scalar();//判断是否为标量

is_numberic();//判断是不是任何类型的数字或数字字符串

is_callable();//是不是有效的函数名

print_r();//输出数组

Php的运算符

一元运算符:!true;//一个操做数前有一个运算符

二元运算符:$a+$b;

三元运算符:true?1:0;

按运算符号的功能分类:

  1. 算术运算符 +  -  *  /  %  ++  --
  2. 字符串运算符  .
  3. 赋值运算符  =  +=  -=  *=  /=  %=  .=
  4. 比较运算符(条件运算符/关系运算符)  >  <  >=  <=  ==(只比较内容)  === (类型也比较) <>  !=  !==
  5. 逻辑运算符  &&/and  ||/or  !/not  异或
  6. 位运算符   &  |  ^(按位异或,相同为0不一样为1)  ~(按位取反)  <<  >>  >>>(无符号右移 通通补零)
  7. 其余运算符  ?  :  ``  @  => ->  ::   &  $

用%有两个目的:整除运算;控制范围 不要用小数或负数取余,%会把两边的数转为整数后再进行整除

逻辑运算符只能操做bool型值,返回的也是bool型值

&和|既能够做为逻辑运算符又能够做为位运算符

短路问题:&&和||会发生短路,&&在作运算时,若是前面的数为false,则后面是否为true,整个表达式都是false,再也不执行后面的操做数;||在作运算时,若是前面的数为true,则后面是否为false,整个表达式都是true,再也不执行后面的操做数。&或|在运算时,两边都会被执行

``,执行运算符,引号中执行操做系统命令,尽可能不要用,可能会影响跨平台

@,错误控制符,屏蔽错误、警告提示

优先级:不用记优先级,使用括号改变优先级

流程控制

1、顺序结构

2、分支结构/条件结构/选择结构

  1. 单路分支

if(条件)//条件bool,true或false,< > == != & || ! isset()

  1. 双路分支

使用else从句

if(条件){

      一条或多条代码

}else{

      一条或多条代码

}

  1. 多路分支

可使用if else if 和switch case

\\这是一种互斥的关系

if(条件){

}else if(){

}elseif(){

}else{

}

 

switch(变量){//变量只用整型和字符串,尽可能不要用其余类型

case 值:

        代码;

        Break;//退出switch的语句,能够不要,不退出switch匹配多个值执

行同一段代码

case 值1:

        代码;

        Break;

default://可选的,无关紧要,不用再加break

       代码;

       }

       若是是判断一段范围使用elseif;若是是单个值匹配使用switch case

  1. 嵌套分支

尽可能不要超过五层

if(){

if(){

}else{

    if(){

    }

}

        }else{

  if(){

}else{

    switch(){

    }

}

       }

3、循环结构

  1. while循环

先判断条件,成立则执行

  1. do-while循环

先执行再判断条件

  1. for循环

for(初始化;条件表达式;增量){

      循环体

}

根据循环条件不一样有两种类型的循环:一种是计数循环  合适for

                                  一种是条件型循环  合适while  do-while  foreach

几个和循环有关的语句:break  continue  exit  return(能够用break2,退出两层循环)

函数的定义:

  1. 函数是一个被命名的
  2. 独立的代码段
  3. 它执行特定任务(功能)
  4. 并能够给调用它的程序返回一个值

函数的优势:

  1. 提升程序的重用性
  2. 提升程序的可维护性
  3. 提升软件的开发效率
  4. 提升软件的可靠性
  5. 控制程序的复杂性

函数的声明:

function 函数名(){

   函数体

}

function 函数名(参数1,参数2,参数3……){//参数列表,若是有多个就用“,”分开

   函数体

}

function 函数名(){

   函数体

   返回值

}

function 函数名(参数列表){

   函数体

返回值

}

函数必须调用才能执行,能够在声明以前调用,也能够在函数声明以后调用

函数名命名和变量同样 aaaBbbCccc 函数名称必定要有意义,函数名能够:调用函数,开始执行函数;向函数中传递数据;函数名就是返回的值

函数在声明时不能重名

能够经过向函数传递参数,改变函数的行为,参数越少越好

     参数分为:形参:在声明函数时声明的参数,参数就是变量,多个参数用“,”分开

               实参:调用函数时传递给形参的值(数据,也能够是变量)

若是没有返回值则称为过程

经过使用return语句返回数据,函数执行到return语句就结束,因此不要在这个语句后写代码,也可使用return结束函数的执行

Php的变量的范围

局部变量:在函数中声明的变量就是局部变量,只能在本身的函数内部使用

全局变量:在函数外声明,在变量声明之后,直到整个脚本结束前均可以使用,包括在函数中和{}中均可以使用

Php的变量分不出是声明仍是使用

在php中使用全局变量,要经过global关键字将这个全局变量包含到函数中才能使用到,在global声明以后才是使用全局的变量

参数就是局部变量,这个局部变量能够调用时赋值

Php的静态变量

静态变量只能声明在函数中(类中),不能在全局声明

使用static在变量前

做用:一个变量能够在同一个函数在屡次调用中共用

  1. 静态变量在静态代码段中保存
  2. 一个函数屡次调用之间共用,但只在第一次调用函数时声明到内存,之后再调用时就再也不声明,而直接使用

变量函数

若是一个变量后面有括号$var=hello  $var(),就将寻找与变量值同名的函数hello();

函数须要知道的信息:1.函数的功能--------决定是否使用这个函数

                    2.函数的参数--------决定函数怎么调用(几个参数,传什么类型的值…)

                    3.函数的返回值-----调用后怎么处理这个函数

必定要先使用系统函数(比自定义函数效率高),若是系统函数没有你想要的功能,再去本身定义函数

函数调用方法:1.常规函数  bool copy ( string source, string dest)

              2.带有mixed的函数,mixed表示能够传任何类型的数据

                bool chown ( string filename,mixed user )

              3.带有&参数的函数,表示引用赋值,这个函数不能传值,只能传一个变量,而后函数将变量的值改变,咱们在使用这个变量时,值也是变化的

                bool arsort ( array &array [, int sort_flags])

              4.默认函数(实参能够比形参少) 带有[ ]的函数,表示这个参数是可选的,若是你传值了就使用你传的值,若是没有传值则使用默认值。直接在声明函数时,就为函数赋初值。可选值和必须值,必须从后向前设置

                bool arsort ( array &array[ ,int sort_falgs])

              5.带有…的参数函数,…表示能够传任意多个参数(实参能够比形参多)

                int array_unshift ( array &array, mixed  var [, mixed …])

              6.回调函数 带有callback,就是调用这个函数时须要咱们传一个函数进来(函数名、函数名字符串)

                 array array_filter ( array input [, callback callback])

函数的使用

  1. 内部函数  php能够在函数内部再声明函数,目的就是在函数内部使用,用来帮助外部函数完成一些子功能
  2. 递归函数 :就是在本身内部调用本身的函数名
  3. 重用函数(使用本身定义的函数库)

系统指令,两种用法 既能够作函数又能够作系统指令

require  用于静态包含,肯定包含哪一个文件了

include  用于动态包含,根据不一样的条件去找哪一个文件要包含

        eg:if($classname==”action”){include “action/”.$classname.”.php”;}

require_once  会自动判断文件是否被包含过,包含过就再也不包含

include_once

echo

break

exit

 

include(文件名); 文件包括 .txt  .html  .php  至关于解释过的php文件

include “文件名”; 系统指令

  1. 一些系统函数的使用

is_dir()判断是否是目录(当前脚本目录下)

数组的概述

  1. 数组的本质:管理和操做一组变量,成批处理
  2. 数组是复合类型
  3. 数组中能够存储任意长度的数据,也能够存储任意类型的数据
  4. 数组就能够完成其余语言数据结构的功能(链表、队列、栈、集合类)

数组中存有多个单元,单元称为元素,每一个元素(下标【键】和值),单访问元素时,都是经过下标(键)来访问元素

数组的分类

  1. 一维数组  二维数组  。。。 多维数组(数组的数组,就是在数组中存有其余的数组)
  2. Php中有两种数组:

   索引数组:就是下标是顺序整数的索引

   关联数组:下标是字符串做为索引    下标只有整数和字符串两种类型

通常有规律的数组定位索引数组,无规律性用关联数组

数组的多种声明方式

  1. 直接为数组元素赋值声明

若是索引下标不给出,就会从0开始顺序索引;若是给出索引下标,下一个就会是从最大的开始增1;若是后面出现前面的下标,若是是赋值就是为前面的元素从新赋值

索引和关联混合声明时,不互相影响(不影响索引下标的声明)

  1. 使用array()函数声明

默认是索引数组

若是为关联数组和索引数组指定下标,使用 键=>值

$user=array(1,”zhangsan”,10,”nan”);

$user=array(“id”=>1,”name”=>”zhangsan”,”age”=>10,”sex”=>”nan”);

多个成员间使用“,”分隔

$user=array(

          array(1,”zhangsan”,10,”nan”),

          array(2,”lisi”,20,”nv”),      //$user[1][1]访问lisi

          array(3,”wanger”,30,”nan”)

);

  1. 使用其余函数声明

数组的遍历

  1. 使用for语句循环遍历数组

   其余语言经常使用的方式(基本只有这一种方式)

   Php中这种方式不是咱们首选的方式

   数组必须是索引数组,并且下标还必须是连续的(php中索引下标能够不连续

数组还有关联数组)

  1. 使用foreach语句循环遍历数组

foreach(数组变量 as 变量值){

    循环体

}

循环次数由数组的元素个数决定

每一次循环都会将数组中的元素分别赋值给后面的变量

$user=array(1,”zhangsan”,10,”nan”);

foreach($user as $val){     //$val是自定义变量

     echo $val.”<br>”;

}

foreach(数组变量 as 下标变量=>值变量){   //下标变量和值变量都是自定义的

      循环体

}

  1. while() list() each()组合循环遍历数组

each()函数:

   a.须要一个数组做为参数

   b.返回来的也是一个数组

   c.返回来的数组是0,1,key,value四个下标(固定的)

     0和key下标是当前参数数组元素的键;1和value是当前参数数组元素的值

         d.默认当前元素就是第一个元素

         e.每执行一次后就会将当前元素向后移动

         f.若是到最后的元素再执行这个函数,则返回false

      list()函数:

         a. list()=array(); 须要将一个数组赋值给这个函数

         b.数组中的元素个数,要和list()函数中的参数个数相同

         c. 数组中的每一个元素值会赋值list()函数中的每一个参数,list()将每一个参数转

变为变量

         d. list()只能接收索引数组

         e.按索引下标的顺序

     使用数组内部指针控制函数

         next(数组);//指针下移

        prev(数组);//向上移

        reset(数组);//指针移动到第一个

        end(数组);//最后一个

      

        current(数组);//取走指针位置的内容资料(当前元素内容值)

        key(数组);//获取当前元素键值

预约义数组

自动全局变量---超全局数组

  1. 包含了来自web服务器,客户端,运行环境和用户输入的数据
  2. 全局范围内自动生效,均可以直接使用这些数组
  3. 用户不能自定义这些数组,这些数组是已经存在的数组,能够直接用,和咱们自定义的数组操做方式同样
  4. 用户定义数组时,应避免数组名称和预约义数组名称相同

$_GET      //经由URL请求提交至脚本的变量  地址栏最大8092个字节(有密码或

大数据不适宜用get请求)

$_POST       //经由HTTP POST方法提交到脚本的变量

$_REQUEST       //经由GET,POST 和COOHIE机制提交到脚本的变量,所以该数组并

不值得信任,尽可能不去使用

  $_FILES       //经由HTTP,POST文件上传而提交至脚本

$_COOKIE    //会话控制

$_SESSION    //会话控制

$_ENU     //执行环境提交至脚本的变量

$_SERUER      //变量由WEB服务器设定的,或直接和当前脚本的执行环境相关联

                URL,IP地址等

$GLOBALS      //只要是当前脚本有效的变量都在这里,数组键名为全局变量的名称

$_GET[“hello”]=”#######”;

print_r($_GET);

5.在函数中直接使用这些数组

数组的相关处理函数

一.和数组键/值操做有关的函数

  1. array_values(array input);//返回input数组中全部的值并给其创建数字索引   返回元素值,返回的也是一个数组,数组为顺序索引
  2. array_keys(array input[,mixed search_value[,bool strict]]);//返回数组中全部的键名,第二个参数返回指定该值的键名,第三个参数设为true进行全等比较(即也比较类型)
  3. in_array(mixed needle,array haytack[,bool stract]);// 搜索数组 检查给定的元素值是否存在于数组中(在haytack中搜索needle),返回布尔型值,第三个参数表示是否进行全等比较,mixed表明任意类型数据
  4. array_key_exits(mixed key,array search);//检查给定的键名是否存在于数组中
  5. array_flip(array trans);//交换数组中的键和值,返回数组  值能够重复下标不能重复,当有相同的值进行交换时,后面的会覆盖前面的下标
  6. array_reverse(array array[,bool preserve_keys]);//返回一个单元顺序相反的数组

二.统计数组元素的个数和惟一性的相关函数

  1. count(mixed var[,int mode]);  sizeof();//统计数组长度  两个函数功能同样,只是叫 法不一样,计算数组中的单元数目或对象中的属性个数 第二个参数为‘1’递归检测多维数组中元素个数,为‘0’不检查
  2. array_count_values(array input);//统计数组中全部的值出现的次数   返回一个数组,该数组用给定数组的值做为键名,该值在给定数组中出现的次数做为值 
  3. array_unique(array array);//移除数组中重复的值

三.使用回调函数处理数组的函数(容许在函数的参数列表中传入用户自定义的函数)

     1.array_filter(array input[,callback callback]);//过滤 用回调函数过滤数组中的单元 两个

参数,一个数组,一个用户自定义函数   有返回真值的留下,假值不保留

2.array_walk(array &array,callback funcname[,mixed usedata]);//对数组中每一个成员应用用户函数 成功返回TRUE失败返回FALSE  两个参数,第一个是被指定的回调函数处理的数组,第二个为回调函数,典型状况下回调函数funcname接收两个参数,数组的值做为第一个,键名做为第二个,若提供可选参数userdate

     3.array_map(callback callback,array arr1[,array…]);//将回调函数做用在给定的数组单元上,callback为回调函数,后面参数使用多个数组时,数组长度保持相同

四.数组的排序函数

    1.简单的数组排序函数(对数组元素的值进行排序,但原始键名会被忽略换为数字索引顺序排列)

  Sort(array &array[,int sort_flage])由小到大排序,第一个参数为引用参数,则排序后数

组原型会改变,第二个参数值使用下列常量:SORT_REGULAR正常比较单元(不改变类型)SORT_NUMERIC 单元被做为数字来比较SORT_STRING单元被做为字符串来比较

Rsort()由大到小排序

2.根据键名对数组排序

  Ksort()  krsort()

3.根据元素的值对数组排序(保留原有键名和值的关系)

      Asort() arsort()

    4.根据“天然数排序”法(即0-9,a-z)对数组排序

  Natsort()   natcasesort()不区分大小写

5.根据用户自定义规则对数组排序

  Usort()  uasort()保持索引关联  uksort()按照键名对数组排序,并保持索引关系

    6.多维数组排序

Array_multisort()

五.数组的拆分、合并、分解、接合函数

    1.arrary_slice(array array,int offset[,int length[,bool preserve_keys]])从数组中取出一段,便是在array中从offset开始取length长度的一段,若offset为负则序列将从array中距离末端这么远的地方开始,若length为负则序列将终止在距离数组末端这么远的地方,若length省略则序列将从offset开始到array末端,第四个参数为true保留原有下标

    2.array_splice()与第一个相似但不返回而是删除它们并用其余的值代替(被第四个参数指定的数组取代)

    3.array_combine()合并两个数组来建立一个新的数组,其中一个数组是键名(第一个参数)另一个数组的值为键值,若其中一个数组为空或两个数组长度不一样就会返回假

    4.array_merge()把一个或多个数组合并为一个数组,若键名有重复则键值为最后一个的键值,若键名为数字索引则键名会与连续的重复索引合并在一块儿

    5.array_intersect()计算数组的交集,取出两个或多个数组相同的部分

    6.array_diff()返回两个数组的差集

六.数组与数据结构的函数

1.使用数组实现堆栈的功能

  栈空间 后进先出 入栈出栈又称作压入弹出

    入栈 Array_push($arr,”hello”,”hi”),在$arr中压入值hello,可连续调用屡次

    出栈 Array_pop($rr) 弹出栈顶数据

2.使用队列

队列 先进先出

    Array_unshift() 压入,在第一个显示

    Array_shift() 从队头弹出数据(即数组中第一个元素),删除队列中的元素

 Unset()删除变量、数组中元素(删除之后那个元素的下标也不存在)、对象中的成员

七.其余与数据操做有关的函数

    Array_rand()随机从数组中取出一个或多个元素的下标并返回,两个参数,第一个是数组,第二个是随机取的个数(默认为1,取的是下标,取值:$arr[array_rand($arr)])

    Shuffle($arr)随机调度,把数组中元素按随机顺序从新排列,成功返回真,传递的是引用,原数组发生变化

Array_sum($arr)求数组全部元素成员和,返回和
    range()建立并返回一个包含指定范围元素的数组,三个参数,第一个参数是必选项规定

       数组元素的最小值,第二个规定最大值,规定数组元素从哪到哪,第三是可选项规定数组元素之间的步长(默认为1)

面向对象概述

数组和对象都属于PHP中的复合类型(一个变量能够存储多个单元),对象比数组更强大,不只能够存储多个数据,还能够将函数存在对象中,但对象操做不如数组灵活

对象的三大特性:封装 继承 多态

面向对象编程(oop)

面向对象和面向过程的区别:

   面向过程:最小单位:函数

   面向对象:最小单位:对象

对象 类:对象中包含两样 成员属性=变量 定义对象的外观和状态  成员方法=函数 定义对象的功能。声明类->实例化对象(建立对象)->用对象,声明类时,类中的内容就是成员属性和成员方法,经过类建立的对象中的内容就是类中声明的内容

类的声明与对象实例化

类的声明

1.肯定写什么类

  2.类中的成员必定要属于这个类,即跟类无关的东西不要写

[修饰类的关键字] class 类名{

   成员属性;

   成员方法;

}

在类中声明成员属性时,前面必须有修饰词,[private protected public static const var …]$bianLiang=’’;,不肯定用什么时,能够用var或public。类中的成员属性,若是建立对象时,每一个对象有不一样的属性值时,不要直接给初值,建立好对象以后再给值

一个文件只保存一个类,文件名中包含类名(不包含的话无法自动加载),推荐使用:类名.class.php

变量名:aaaBbbCcc

函数名:aaaBbbCcc

常量名:AAABBBCCC

类名:AaaBbbCcc

注意:无论任何名称,必定要有意义

能够有空类,不包含任何内容

实例化对象

经过类来实例化对象

1.使用new新建一个对象,加上类名,就是建立那个类的对象

        $对象引用=new 类名; eg:$p=new Person;

      2.只要有一个new关键字就是建立一个对象,建立一个对象就在内存中分配了一个空间,只有对象才在内存有存储空间

对象的使用

    对象中成员必须经过对象的引用来访问

       对象->成员属性=新值

       Echo 对象->成员属性

       对象->成员方法

对象在内存中的分配状况

内存:分四段

         数据段(初始化静态段)存静态信息,在程序中公用的东西(eg:静态变量、常量)

         栈内存 空间小、CPU访问速度快,存放空间大小不变的数据(整数占4个字节、布尔型占1字节、double型占8字节、浮点型占4字节)

      堆内存 空间大,CPU不能直接访问,须要经过栈中的引用访问,存放长度不固定、比较大的数据(eg:字符串、数组、对象)

      代码段 存程序结构(eg:函数、方法)

   

面向对象的构造与析构方法

    1.对象中成员的访问(就是在一个对象的内部方法中,去访问本对象中的其余方法和成员属性)

    2.在对象中的方法中都默认有一个$this关键字,这个关键字表明调用这个方法的对象

构造方法(又叫构造器)

1.是对象建立完成之后,第一个自动调用的方法

       2.构造方法的定义,方法名固定

         在PHP4中,和类名相同的方法就是构造方法

         在PHP5中,构造方法选择使用魔术方法__construct()全部类中声明构造方法都使用这个名称,它的优势是在改变类名时构造方法不用改变

         Function Person($a,$b,$c){}

         $p=new Person(1,5,6)

         魔术方法:在类中写出了某个魔术方法,这个方法对应的功能就会添加上。方法名称都是固定的(由系统提供),没有本身定义的。每个魔术方法都是在不一样时刻为了完成某一功能自动调用的方法,不一样的魔术方法有不一样的调用时机,方法名都是以__开头

                   __construct();构造方法

                   __destruct();析构方法

                   __set();封装时用

                   __get();  __isset();  __unset();

                   __clone();  __call();  __sleep();  __weakup();  __toString();

                   类外也有魔术方法  __autoload();自动加载

       做用:为成员属性初始化

析构方法

  1. 当对象被垃圾回收器释放(当对象前面的引用没了时释放)以前最后一个自动调用的方法

使用垃圾回收器    析构方法做用:关闭一些资源,作一些清理工做

释放顺序,栈内存,后进先出

面向对象的三大特性

1、封装性

    1.就是把对象的成员(成员属性、成员方法)结合成一个独立的相同单位,并尽量隐藏对象的内部细节

     属性和方法均可以封装

     使用的关键字有public protected private

     Private私有的,用这个关键字修饰的成员,只能在对象内部访问(只有用$this访问),不能在对象外部使用

     做用:使用private修饰使用其只能在内部使用

     属性封装:只要一个变量,须要在多个方法使用,就将这个方法声明为成员属性,能够直接在这个对象中的全部方法中使用。成员属性就至关于这个对象中的全局变量,成员属性都会在方法中使用,其值的变化其实就是在改变方法的执行行为,也就是改变了对象的功能。成员属性的值若是不正常,方法执行的功能也就不正常了

     属性封装做用:不须要在对象外部改变或读取它的值。封装而后再提供一个公有的方法,通过方法对成员属性进行赋值和取值就能够控制

     和封装有关的魔术方法:

         __set(); 是直接设置私有成员属性值时,自动调用的方法

         __get();是直接获取私有成员属性值时,自动调用的方法

         __unset();直接使用isset查看对象中私有属性是否存在时自动调用这个方法

         __isset();直接使用unset删除对象中私有属性时,自动调用的方法

2、继承性

     相关名词:父类--基类  子类—派生类

     使创建的软件具备开放性和可扩充性,增长代码的重用性

     继承就是用子类去扩展父类,C++属于多继承,同一个类能够有多个父类,PHP和JAVA属于单继承,同一个类只能有一个父类,可是多继承和单继承均可以有多个子类

(一)类继承的应用

      1.声明一个子类,使用extends关键字去继承(扩展)一个父类

         2.子类能够从父类继承全部内容,包括成员属性、成员方法、构造方法等等,在子类中均可以直接使用

(二)访问类型控制

        虽然子类能够从父类中继承全部内容,可是父类中的私有成员只能在本类中使用,不能再子类中使用,将private改成protected就能够实现,封装时既可让本身类的内部访问,也可让子类访问,可是类的外部不能访问

        Private 本类

        Protected 本类、子类

        Public  本类、子类、类外部(默认)

(三)子类中重载父类的方法

         其实PHP中没有重载这一说法  函数名相同,参数类型或个数不一样

  1. 子类能够声明和父类相同的方法名,即子类覆盖了父类中同名的方法,子类方法对父类方法的扩展。

对象->成员  类::成员

在子类中调用父类中被覆盖的方法:父类名::方法名() 或parent::方法名()

在子类中编写构造方法,若是父类中也有构造方法必定要调用一次父类中被覆盖的那个构造方法

注意:子类中重载的方法,不能低于父类中访问权限,子类能够放大权限不能缩小权限

 

Php经常使用的关键字

Final

  1. final不能修饰成员属性(类中的常量不是用这个关键字声明)
  2. final只能修饰类和方法

做用:使用final修饰的类不能被子类继承

      使用final修饰的方法不能被子类覆盖

      用来限制类不被继承,方法不被覆盖

 

Static

  1. 使用static能够修饰成员属性和成员方法,不能修饰类。
  2. 使用static修饰的成员属性能够被同一个类的全部对象共享,内存中只有一份,存在数据段中
  3. 静态的数据是存在内存中的数据段中(初始化静态段)
  4. 静态的数据是在类第一次加载时分配到内存中的,之后再用到类时直接从数据段获取
  5. 类被加载:只要在程序中使用到这个类(有这个类名出现)

注意:静态的成员都要使用类名去访问,不用建立对象,即便有对象也不用对象去访问

        类名::静态成员  若是在类中使用静态成员,可使用self表明本类($this表明本对象)

  1. 静态方法不能访问非静态成员,非静态方法能够访问静态成员,非静态成员必须使用对象访问,访问内部成员使用$this,而静态方法不使用对象调用,$this也就不能表明任何对象,因此就不能使用非静态成员。若是能确保一个方法不使用非静态成员,则能够将这个方法声明为静态方法

Const

  1. 只能修饰成员属性

PHP中声明常量:define(‘HOST’,’www.xsphp.com’);

  1. 类中声明常量属性使用const,命名方式和define是同样的效果,可是访问方式和static静态成员属性同样(在类外部使用 类名::常量,在类内部使用 self::常量),常量必定要在声明时就给初值,常量值只能是标量(整型、字符串、布尔型、浮点型),常量不容许改值

PHP中经常使用的魔术方法

__call()

   做用:在调用对象中不存在的方法时就会出现系统报错,而后程序退出

   何时自动调用:在调用一个对象中不存在的方法时自动调用

   处理一些不存在方法的错误调用

   有两个参数,一个是不存在方法的方法名,一个是不存在方法的参数(数组)

__toString()

   快速读取对象字符串表示的最佳方法

   直接输出对象引用时自动调用,用来获取对象字符串表示的最便捷的方式

__autoload($classname)

   自动加载类的方法

   注意:其余的魔术方法都是在类中添加起做用,这是惟一一个不在类中添加的方法

   只要在页面中使用到一个类,只要用到类名就会自动将类名传给这个参数

   Eg:  function __autoload($className){

          Include “./”.$className.”.class.php”;

}

$o=new One();

__clone()

   克隆对象 使用clone处理  本来(原来的对象) 复本(复制出来的对象)

   克隆对象时自动调用的方法

   只要一个对象一诞生就要有初始化的动做,和构造方法__construct做用类似

   __clone()方法中的$this关键字,表明的是复本,$that表明本来对象

对象串行化(序列化):将一个对象转为二进制串(对象存储在内存中)

  1. 将对象长时间存储在数据库或文件中时使用(二进制能够长期储存)
  2. 将对象在多个PHP文件中传输时使用

Serialize()  参数是一个对象。返回来的就是串行化后的二进制串

Unserialize() 反序列化 参数就是对象的二进制串,返回来的就是新生成的对象

 

__sleep()

   在序列化时自动调用的方法

   做用:能够将一个对象部分串行化 只要这个方法中返回一个数组,数组中有几个成员属性就序列化几个成员属性,若是不加这个方法,则全部成员都被序列化

   Function __sleep(){

       Return array(“name”,”age”);

}

__wakeup()

   在反序列化时自动调用的方法

   也是对象从新诞生(须要初始化)的一个过程

   Function __wakeup(){

      $this->name=”sanzhang”;//$this指新诞生的对象

      $this->age=$this->age+1;

}

抽象类和抽象方法、接口的应用

抽象类是一种特殊的类,接口是一种特殊的抽象类(做用和抽象类相同),而多态就要使用到抽象类或接口

抽象类

   抽象方法 若是一个类中的方法没有方法体(就是一个方法没有使用{}而直接使用分号结束abstract function test();)的方法就是抽象方法

            抽象方法必须使用abstract修饰

   抽象类 若是一个类中有一个方法是抽象的则这个类就是抽象类(其余不变,能够在抽象

类中声明成员属性,常量,非抽象的方法)

          抽象类必须使用abstract修饰,抽象类不能实例化对象(不能经过抽象类去建立

一个抽象类的对象)

   做用:要想使用抽象类必须使用一个类继承抽象类,而要想使用这个子类就子类必须不能再是抽象类,子类能够重写父类的方法给抽象方法加上方法体。就是在定义一些规范,让子类按这些规范去实现本身的功能。目的就是将你本身写的程序加入到原来已经写好的程序中去(别人写好的程序,不可能等你开发完一个小模块,根据你的小模块继续向后开发)

 

接口

   PHP是单继承的,若是使用抽象类,子类实现完抽象类就不能再去继承其余的类,若是既想实现一些规范又想继承一个其余类,就要使用接口

   接口和抽象类对比:

  1. 做用相同,都不能建立对象,都须要子类去实现
  2. 接口的声明和抽象类不一样

Interface 接口名{}

  1. 接口被实现的方式不同
  2. 接口中全部方法必须是抽象方法,只能声明抽象方法(不用使用abstract修饰)
  3. 接口中的成员属性,只能声明常量,不能声明变量
  4. 接口中的成员访问权限都必须是public,抽象类中最低的权限protected
  5. 使用类实现一个接口使用关键字implements,而不是extends。类—接口、抽象类—接口 implements   接口—接口 extends

   可使用抽象类实现接口中的部分方法,若是想让子类能够建立对象,则必须实现接口中的所有抽象方法。能够定义一个接口去继承另外一个接口

   一个类能够实现多个接口(按多个规范去开发子类),使用逗号分隔多个接口名称

   一个类能够在继承一个类的同时实现一个或多个接口(先继承再实现)

   使用implements的目的:

      1.能够实现多个接口,而extends只能继承一个父类

      2.没有使用extends,能够继承一个类,因此两个能够同时使用

多态

   多态就是让具备继承关系的不一样类对象,能够对相同名称成员函数调用,产生不一样的反应效果。多态的功能可让软件在开发和维护中达到充分的延伸性

PHP内置字符串处理函数

PHP中重要的一种数据类型

字符串处理函数比正则表达式处理字符串的效率要高,因此同时能用字符串处理函数和正则表达式处理时建议使用字符串处理函数

字符串特色:1.其余类型的数据用在字符串处理函数中,会自动将其转为字符串后再处理

            2.能够将字符串视为数组,当作字符集合来看待。为与数组的区分,字符串使用大括号(也能使用中括号,只是为了好区分),$str{2}

Php中内置的字符串处理函数:

在php中全部字符串处理函数,都不是在原字符串上修改,而是返回一个新格式化后的字符串

  1. 经常使用的字符串输出函数

Echo() 既能够是函数,也能够是系统指令,echo ‘aaa’;  echo(‘aaa’);,做为系统指令使用时能够输出多个,echo ‘111’,’222’,’333’,’444’,’<br>’,;,但函数没有这种用法

Print()功能和echo相同,但它有返回值,成功返回真,失败返回假,但执行效率没有echo高,因此通常都是用echo输出

Die()  exit()的别名 exit;  exit(“aaaaaaaaaaaaa”);  die(“aaaaaaaaaaa”);   exit(0);  exit 1;

         Exit后面加数字,表示退出的状态,数字从0到254,0表示成功退出程序,其他为失败,数字没有必要加

Printf()

Sprintf()

   上两个函数用法彻底同样,用于格式化字符串,字符串按什么格式输出,只是sprintf没有直接输出,而是返回一个字符串。有两个参数,第一个是输出的格式,若是没有要输出的变量,那第一个参数写要输出的字符串就行,能够把变量插入在字符串中,插入几个后面对应有几个参数

   格式:%%按百分比输出  %b按二进制输出  %c按字符输出 %d按整数输出  %f按浮点数输出  %o按八进制输出  %x按十六进制输出  %s按字符串输出

   Eg:$str=”100.6723abc”; printf(“%s-----------------%s-----”,$str,$str);   %.2f保留两位小数 

      %’#20s 按字符串输出,长度为20,不够的部分用#补充(在左边补充,想要在右边的话将20换为-20)

  1. 经常使用的字符串格式化函数

Ltrim()去除左空白  空格在字符串中占一位

Rtrim()去除右空白 两个参数,第一个为字符串,第二个是指定要过滤的字符或字符串,

      默认为空白

Trim()去除两边空白

Str_pad()把字符串填充成新的长度  str_pad($str,10);在字符串$str上补10个空字符

        Str_pad($str,10,’-=’);用-=补充,补充默认在右边,能够加第四个参数STR_PAD_BOTH在两边补充LEFT左边补充

strtolower()把字符串转为小写

strtoupper()把字符串转为大写

ucfirst()把首字母转为大写

ucword()把字符串每一个单词转为大写

和HTML标签相关的字符串格式化函数:

nl2br在字符串的每一个新行以前插入HTML的换行符

htmllentities()把字符串转为HTML的实体

htmlspecialchars把一些预约义的字符串转为HTML的实体

stripslashes()删除表单提交的反斜杠

strip_tags()删除HTML、XML、php的一些标签,有两个参数,第一个是指定的字符串,第二个参数能够指定一些标签不被删除,strip_tags($str,’<b><p><h1>’);

 

number_format(float number[,int decimals[,string dec_point,string thousands_sep]])经过千位分组格式化一些数字,参数:浮点数[,保留几位[,小数点用什么表示,千分位用什么隔开]],$price=1234.345;  number_format($price);  number_format($price,2);   number_format($price,2,’.’,’,’);  1,234  1,234.34

          1,234.34

strrev()反转字符串 http://www.xsphp.com  moc.phpsx.www//:ptth

md5()把字符串用md5计算

md5_file()对整个文件加密

  1. 字符串比较函数

按字节顺序比较(ASCII码):

Strcmp($str1,$str2)两个参数,三种返回结果1($str1>$str2)、0($str1==$str2)、-1($str1<$str2)

Strcasecmp()不考虑大小写,两个参数,三种返回结果一、0、-1

按天然数排列的比较:

Strnatcmp()

正则表达式在字符串处理中的应用

字符串处理函数对于一些复杂的字符串没有办法处理,须要使用正则表达式

正则表达式就是描述字符串排列模式的一种自定义语法规则。经过构建具备特定规则的模式,与输入的字符串信息比较,在进行分割、匹配、查找、替换等工做。若是可使用字符串处理函数完成的任务就不要使用正则表达式

正则表达式特色:

正则表达式也是一个字符串,由具备特殊意义的字符组成的字符串,具备必定的编写规则,因此也是一种模式  例如:”/\<img\s*src=\”.*?\”\/\>/”验证图片

注意:正则表达式只有放在函数中才能发挥做用,不然它就只是一个字符串

Php提供两套正则表达式函数库:POSIX扩展正则表达式函数库(ereg_);Perl兼容正则表达式函数(preg_),两个函数库功能相同,找一个处理字符串效率高的,推荐使用Perl兼容正则表达式函数

1、正则表达式模式编写

语法:1.定界符号 起始和结束符号 //  但定界符不知局限于反斜线,除字母、数字、

正斜线\之外的任何字符均可以做为定界符

2.原子  eg:img  \s  .

   只要一个正则表达式能够单独使用的字符,就是原子

   1.全部打印(全部能够在屏幕上输出的字符,键盘上随意敲一个键都是打

印字符)和非打印字符(看不到的,好比回车、空格)

   2. . * + ? (<>若是全部有意义的字符,想做为原子使用,通通使用“\”转义

字符转义。转义字符能够将有意义的字符转成没意义的字符,也能够将没意义的字符转成有意义的字符

                3.在正则表达式中能够直接使用一些表明范围的原子

                  \d : 表示任意一个十进制的数字

                  \D : 表示任意一个除数字以外的字符

                  \s : 表示任意一个空白字符,空格、\n\r\t\f   [\n\r\t\f ]

                  \S : 表示任意一个非空白  [^\n\r\t\f ]

                  \w : 表示任意一个字,即a-zA-Z0-9_    [a-zA-Z0-9_]

                  \W :任意一个非字,除了a-zA-Z0-9_之外的任意一个字符[^a-zA-Z0-9_]

                4.本身定义一个原子表[],能够匹配方括号中的任何一个原子

例如:[1-5p-z]  [^]表示取反,就是除了原子表中的原子,均可以表示(^必须在[]内的第一个字符处)例如:[^abc]除了abc其余均可以

   全部大小写字母、数字、标点符号等

   注意:原子是正则表达式最基本组成单位,并且必须至少要包含一个原子

          3.元字符

           元字符是一种特殊的字符,用来修饰原子,不能够单独使用。加上\能够做原子

            *  :表示其前面的原子能够出现0次、1次、屡次   {0,}

            +  : 表示其前面的原子能够出现1次或屡次   {1,}

            ?  : 表示其前面的原子能够出现0次或1次  {0,1}

            {}  :用于自定义前面原子出现的次数 {n}//n表示一个整数,{5}表示前面的原子出现5次,不能多,也不能少;{m,n}//m、n为整数,m小于n,表示前面原子出现次数在m到n范围内(包括m和n);{m,}//表示前面的原子最少出现m次,最多无限

            |  :表示或的关系,它的优先级别是最低的,最后考虑它的功能,因此/cat|dog/表示cat或dog而不是c或d,/d|g/表示d或g

            .  :默认状况下,表示除换行符外任意一个字符

            ^  :直接在一个正则表达式的第一个字符出现,则表达式必须以这个正则表达式开始

            $  : 直接在一个正则表达式的最后一个字符出现,则表达式必须以这个正则表达式结尾

            ()  :重点。1.做为大原子使用 /(abc)+/  2.改变优先级,加上括号能够提升优先级别  /ca(t|d)og/  3.做为子模式使用,正则表达式不光对一个字符串匹配一次,所有匹配做为一个大模式,放到数组的第一个元素中,每一个()是一个子模式按顺序放到数组的其余元素中,eg:

                $pattern=”/(\d{4}\W\d{2}\W\d{2})\s+(\d{2}\W\d{2}\W\d{2})\s+(am|pm)/”;

                $string=”today is 2014-11-16 16:27:17 pm…”;

                Preg_match($pattern,$string,$arr);

                $arr: Array([0]=>2014-11-16 16:27:17 pm [1]=>2014-11-16 [2]=>16:27:17 [3]=>pm);4.能够取消子模式,就将()做为大原子或改变优先级使用,在括号中最前面使用“?:”就能够取消这个()表示的子模式eg:(?:am|pm)

                5.反向引用,能够在模式中直接将子模式取出来,再做为正则表达式的一部分,若是是在正则表达式像替换函数preg_replace函数中,能够将子模式取出,在被替换的字符串中使用。\1取第一个子模式、\2取第二个子模式、……(注意是单引号仍是双引号引发来的正则表达式,由于双引号能够解释任意转义字符,而单引号只能解释转义自己的单引号使用的转义字符)”\\1” ‘\1’

                $pattern=”/\d{4}(\W)\d{2}\\1\d{2}\s+\d{2}(\W)\d{2}\\2\d{2}\s+(?:am|pm)/”;

                $string=”today is 2014-11-16 16:27:17 pm…”;

                Preg_match($pattern,$string,$arr);

                $arr: Array([0]=>2014-11-16 16:27:17 pm [1]=> - [2]=>:)

            \b  :表示一个边界。/\bis\b/ this is island 匹配中间有两个边界的is

            \B  :表示一个非边界。/\Bis\b/ this is island 匹配this的is

            元字符优先级:转义字符\

 () (?:) []

* + ? {}

^ $ \b \B

|

4.模式修正符号  在定界符外使用   i  u

  模式修正符,就是几个字母,对整个正则表达式调优使用,也能够说是对正则表达式功能的扩展,每个具备必定意义,能够一次使用一个,也能够连续使用多个

  i:表示在和模式进行匹配时不区分大小写

  m : 视为多行 默认状况,将字符串视为一行,加上m可视为多行,^  $  视为多行后,任何一行均可以以正则开始或结束

  s: 视为单行 若是没有使用这个修正符,元字符中的“.”默认不能表示换行符,将字符串视为单行,加上s,’.’能够表示任意一个字符,包括换行符

  x: 表示模式中的空白忽略不计

  e: 正则表达式必须使用在preg_replace替换字符串的函数中时才可使用

  A: 表示必须以什么开头,/abc/A,必须以abc开头

  Z: 必须以什么结尾

?正则表达式特色就是比较“贪婪”(参考例子,xsphp 24.php),.* .+  全部字符都符合这个条件,有两种解决办法,一种是使用模式修正符U,另外一种是使用?,.*?  .+?。若是两种方式同时出现,至关于开启了贪婪模式

/原子和元字符/模式修正符号

经常使用正则表达式:

    用户名不能为空:/^\S+$/

    URL:/(https?|ftps?):\/\/(www|mail|news)\.([^\.\/]+)\.(com|org|net|cn)/i

 

2、正则表达式处理函数

和字符串处理函数对比介绍

1.字符串匹配与查找

Perg_match(string pattern,string subject[,array matches[,int flags]]) 正则表达式匹配,在

subject中搜索与pattern给出的正则表达式匹配的内容放在matches中,flags

为匹配次数

    Perg_match_all()匹配全部,flags默认为全模式PREG_PATTERN_ORDER  PREG_SET_ORDER  

    字符串处理函数:若是只想查找字符串中包含某个字符串,建议使用strstr()或strpos()

                    若是只是简单的从一个字符串中取出一个子字符串建议使用substr()

        Strstr()两个参数,eg:strstr(“this is a test”,”test”);,若是找到搜

索的字符串则从匹配点返回字符串的其他部分,不然返回假。该函数对大小

写敏感,若是想使用对大小写不敏感的函数,建议使用stristr()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

数据库相关函数:

  1. mysql_num_rows() 获取select语句查询获得数据集的行数
  2. mysql_query() 对select、show、explain、describe语句返回一个资源标识符,若是查询不正确则返回false
  3. mysql_result($result,int $row[,”name”]) 返回结果集中一个列的值
  4. mysql_fetch_row() 从结果集中取得一行数据做为数字数组,循环调用该函数则返回结果集中的下一行,没有更多则返回false退出
  5. mysql_fetch_assoc() 根据结果集中的行生成关联数组,并返回该数组
  6. mysql_fetch_array($result[,int $result_type]) 从结果集取得一行做为关联数组、数字数组或二者兼有 第二个参数值:MYSQL_ASSOC 关联数组 MYSQL_NUM 数字数组 MYSQL_BOTH 默认,同时产生关联和数字数组
  7. mysql_num_fields(resource $result)返回结果集中字段的数目
  8. mysql_field_name(resource $result,int $field_index)取得结果中指定字段的字段名,field_index是该字段的数字偏移量

68_MySQL数据库管理系统概述

 

   了解Mysql数据库管理系统,内容以下:

  1. 基于数据库的php项目

目前动态网站都是基于数据库的,将网站内容使用数据库管理系统去管理

用户、栏目、图片、文章、评论都存在数据库中

Xscms(库名)

Users(用户表)

Clumn(栏目表)

Pic(图片表)

Articles(文章表)

Commtents(评论表)…..

 

 

  1. 为何要选择使用mysql(概述)

Oracle   DB2   SQL  Sever……

Php+MySQL  黄金搭档(都是开元免费的软件)

  1. Mysql的框架

c/s   Client / Server

Mysql DBMS

客户端       服务器---数据库---数据表---(记录、字段)

  1. Php程序员主要学习那些数据库的操做

1、为你的项目设计表

2、使用sql语句(SQL编程)(增、删、改、查)

3、其他均可以使用工具完成

  1. MySQL的安装和启动过程

细说php配套视频

 

  1. Mysql的目录结构

My.ini(配置文件) bin/ (存在MySQL的全部命令)  data/(MySQL的库)

 

  1. 了解数据库的sql语句操做

SQL(Structured  Query  Language)(结构化查询语言)

DDL:定义和管理数据对象,建立库,建立表

        

         Create database 库名   create database if not exists xsphpdb;

         Create table [库名.]表名 use 库名

        

         Drop database 库名drop database if exists xsphpdb;

         Drop table 表名

 

DML:用于对数据的操做,插入,删除,更新等

         插入值时,全部的数据都按字符串处理

         Insert into users(id,name) values(‘1’,’zhangsan’);

         Update users set name=’lili’ ,age=’10’ where id=’1’;

         Delete from 表名 where id=’1’;

 

DQL:用于查询数据

 

Select * from 表名

 

Desc 表名 (查看表中内容)

Use 库名(选择某个库为默认库)


DCL:数据控制语句

  1. 执行SQL语句,链接到数据库服务器

远程链接c:\>mysql –h 192.168.16.4\网址 –u root –p 123456

  1. 建立数据库nihao
  2. 选择一个库做为默认的数据库

                                    

帮助的使用:

        

         ? contents (查看帮助的内容)帮助提供的内容

         ? + 提供的功能,能够具体查看全部的功能

         ? int 查看int的功能,语法

         ? show 查看show命令

         ? + 关键字 查看其功能

\s查看状态

Show variables;查看配置文件中全部的变量,查看某一个,show variables like  ‘time_zone’;查看时区

Show databases;

Desc users;查看表结构

         建立数据表

1、什么是数据表

 

 

2、建立数据表的SQL语句模型

 

DDL

 

CREATE TABLE [IF NOT EXITS ]表名称(

                   字段名1 列类型 [属性] [索引]

                   字段名2 列类型 [属性] [索引]

                   …….

                   字段名n 列类型 [属性] [索引]

)[表类型] [表字符集];

 

                            表名称和字段名  须要咱们本身定义名称

 

                            Users

                            Articles

                           

SQL是不区分大小写的,可是表就是一个文件名,windows不区分大小写,Linux区分大小写

一、  必定要有意义(英文或英文组合和多个单词的缩写)

二、  本身定义的名称最好都小写

三、  SQL语句都大写

 

 

 

3、数据值和列类型

 

细分都是按空间大小来区分的

 

能够存下就能够

 

一、  数值型

整型(整数)

很是小的整型    1字节  -128--127  0—255(无符号)       TINYINT

                                                                                             较小的整型      2字节  -32768—32767                                                                                              0—65535                   SMALLINT

                                                                                             中等大小的整型       3字节           0—16777215                                                                                       MEDIUMINT

                                                                                             标准的整型                4字节                                                                                                                           -2147483648—2147483647             INT

                                                                                             大整数型                     8字节           BIGINT

                                                                 浮点型(小数)

                                                                                             Float(M,D)一共能够占M位,保留D位小数     4字节

                                                                                             Double(M,D)   8字节

                                                                                             定点数

                                                                                             Decimal(M,D) M+2字节

                              注意:浮点数是近似值,不能用等号来比较

二、  字符型

“mysql” ‘mysql’\

Char(m)           255  固定长度

Varchar(m)     255  可变长度

 

Char(4)            varchar(4)

‘’       4            ‘’         1字节

‘ab’  4            ‘ab’     3字节

‘abcd’4            ‘abcd’5字节

‘abcdefg’4      ‘abcdefg’5字节

                                                       

                                                        Text           文本数据(文章)2      16-   1

                                                       

                                                                           MEDIUMTEXT

                                                                           LONGTEXT

                                                        Blob         二进制数据(相片)

                                                                           MEDIUMBLOB

                                                                           LONGBLOB

                                                        ENUM     枚举         1或2字节

                                                       

ENUM(“one”,“two”,“three”,“four”)---   65535,一次只能有一个值

 

SET            集合        1,2,3,4,8字节          --- 64                  一次能够用多个集合中的值,中间使用“,”分开

三、  日期型

 

DATE                  YYYY-MM-DD

TIME                  hh:mm:ss

DATETIME        YYYY-MM-DD hh:mm:ss

TIMESTAMP     YYYYMMDDhhmmss

 

YEAR                  YYYY

 

建立表时最好不要使用这些中的时间格式(php中时间 1970-1-1 0:0:0)是一整数

 

用整数保存时间  time();

4、数据字段属性

一、unsigned可让空间增长一倍        -128—127                  255

只能用在数值型字段

二、zerofill

         只能用在数值型字段,前导0

         该字段自动应用UNSIGNED

三、AUTO_INCREMENT

只能是整数,数据每增长一条就会自动增1,字段的值是不容许重复

                                               Null 0 留空

                                               每一个表都最好有一个ID字段,设置为自动增涨,auto_increment

四、  NULL和NOT NULL

默认是空

建议:在建立表时每一个字段都不要插入NULL

五、  default

5、建立索引

一、  主键索引

主要做用是肯定数据库表里一条特定数据记录的位置

最好为每一张数据表定义一个主键

一个表只能指定一个主键

二、  惟一索引

均可以防止建立重复的值

每一个表均可以有多个惟一索引

Unique

三、  常规索引

提高数据库的性能

能够提升查找的速度,减慢数据列上插入,删除,修改

和表同样是独立的数据对象

能够单独使用,也能够在建立表时建立

Index key是同义词

四、  全文索引

Fulltext类型索引,MyISAM表类型使用,只有在varchar  char text文本字符串上使用,也能够多个数据列使用

Create table books(

         Id int,

         Bookname,varchar(30),

         Price double,

         Defail text not null,

         Fulltext(detail,bookname),

         Index ind(price),

         Primary key(id)

);

select bookname, price from books where MATCH(detail) AGAINST(‘php’);

select match(detail) against(‘php’) from books;

6、数据表类型及存储位置

Mysql和大多数数据库不一样,mysql有一个存储引擎概念。

Mysql能够针对不一样的存储引擎需求能够选择最优的存储引擎。

引擎  数据表类型

查看MySQL默认使用的搜索引擎  show engines或show variables like ‘table_type’;

只学12种中的MyISAM  和 InnoDB;

一个数据库中能够存在多种数据表类型

create table t1(id int) type InnoDB;   有三个文件.frm(表结构).MYD(表数据)  .MYI(索引)

create table t1(id int) engine InnoDB;   一个文件.frm

 

MyISAM 表类型是默认的

 

选择MyISAM仍是选择InnoDB

注意:  在一个Mysql库中能够(建立表时)指定不一样表类型

MyISAM 表类型

                   OPTIMIZE TABLE 表名

                   强调快速读取操做

                   也有缺点: 有一些功能不支持

InnoDB 表类型

                   支持一些MyISAM所不支持的功能

                   也有缺点:占用空间大,不支持全文索引,读取慢

功能          MyISAM           InnoDB

事务处理      不支持            支持

数据行锁定    不支持            支持

外键约束           不支持            支持

表空间占用    相对小            相对大  最大2倍

全文索引      支持              不支持

7、Mysql默认字符集

Show character set 查看MySQL支持的字符集

Desc information_schema.character_sets;字符集以及该字符集的校对规则

Show collation like ‘gbk’查看校对规则

ACSII

ISO-8859-1/latin1  西欧   常被用来转码

UTF-8     1—4字节   强烈推荐使用

GBK   2字节  name varchar(12)6个汉字  UTF8  3字节  name varchar(12)4个汉字  95年发布

GB180030  2000年发布 与gbk兼容  数据库支持很少

Mysql服务器,数据库,数据表,字段

 

*****数据库中的UTF-8  写为   UTF8

Mysql的字符集包括

 

                   字符集:是用来定义Mysql存储字符串的方式  36

                   校对规则:是对规则定义了比较字符串的方式 70

                   一对多的关系:1个字符集能够对应多个校对规则

        Gbk_chinese_ci  ci比较时不区分大小写

                      cs区分大小写

            Gbk_bin    bin二进制比较

客户端与服务器交互时

 

Character_set_client     客户端字符集

Character_set_connection   连接字符集

Character_set_results   结果字符集

 

       set names 字符集   同时修改以上三个的值

create database xsdemo default character set_gbk collate gbk_chinese_ci;

create table t1(id int) type=InnoDB default character set gbk collate gbk_chinese_ci;

alter table t1 character set utf8;

备份数据库:

C:\document and settings\administrator>mysqldump –u root –p –default-character-set=gbk –d xsdemo1>c:/appserv/www/xsphp/createtab.sql

导入数据库:

C:\document and settings\administrator>mysql –u –p xsdemo (aa.sql)

8、修改表

Alter table t1 modify sex char(3);

Alter table t1 add sex varchar(10) not null after name;

Alter table t1 change name username varchar(30);

Change能够更改列类型和列名

                   Modify 只能更改列类型

                  

                   Alter table t1 rename as users;     从新命名表名

                   Alter table users drop age;

Sql种类

         DDL   DML   DQL   DCL

        

         对于程序员来讲

                                     建立表(为项目设计表)

                                     增、删、改、查

 

                                     插入表格insert

                                     Insert into 表名(【字段列表】) values(值列表1),(值列表2),(值列表3)

                                     特色:

  1. 若是在表名后没有给出字段列表,则值列表必须列出全部字段的值,必须按表中默认的顺序插入
  2. 全部须要写字段名的地方都不加单引号或双引号,但全部值建议都要以字符串(使用双引号或单引号)形式使用
  3. 建议在插入数据时,最好给出字段列表,则值要和字段列表对象对应便可,能够不按表中字段的顺序

Update 表名  set  字段=‘值’ 【,字段2=值2  【,/。。。。。】 】 【条件】 条件是肯定要更改的记录,能够经过条件指定一条,也可指定多条

 

Delete from 表名【条件】

                   Where

Select

 

均可以使用各类运算符号(能够把字段当作一个变量)

只要你想更新、删除、查找,只要写对条件就能准确找到要管理的一条或多条语句

 

SELECT [ALL | DISTINCT]

                   {*|table.*| [table.]field1[as alias1][,table.]field2[as alias2][……..]}

FROM 表名【】

[WHERE……..]

[GROUP  BY……]

[HAVING……..]

[ORDER  BY……]

[LIMIT  count]

使用SELECT查询语句,目的就能够按你的想法将数据查出来,将结果返回给你

一、  字段 要列出要查询的字段

二、  能够为每一个字段起个别名 后面会用到(关键字,多表查询) 表也能够起别名(多表查询、关键字冲突)   a as b或a b

三、  使用distinct做用整个查询列表,取消重复的数据,只返回一个,而不是单独的一列

四、  在SQL语句中使用表达式的列(算术运行符号,可使用条件,逻辑运算符号) 1+1  4-1

五、  WHERE  能够在SELECT UPDATE DELETE

逻辑运算符号(多个条件组合)

                    &&  ||   !

                    AND  OR   NOT

比较运算符

           =   和程序中的 == 不同

           <=>  和 = 做用相同,但能够用于NULL比较

           !=    <>

           <   <=   >   >=

           IS NULL

           IS NOT NULL

           BETWEEN AND

           NOT BETWEEN AND

           LIKE                             (任意一个字符)和%(0个或多个任意字符) 两个通配符号

           NOT LIKE

           IN

           REGEXP RLIKE

正则查询:selct * from productswhere name regexp ‘s$’;查询名字中以s结尾的

六、  多表查询(链接查询)

七、  嵌套查询   子查询

八、  Order by  字段【asc正序】从低到高   desc倒序

Select * from user order by id;

Select * from user order by id desc;

Select * from user where id>5 order by id asc;

九、  Limit count

Select * from user limit 5;

Select * from user where id<10 order by id desc limit 5;

Select * from user where id<14 order by id desc limit 0,1;从0开始取,取一个。可用来取下一条记录

 

Group by 字段

count()

sum()

max()

min()

Mysql中的内置系统函数

                            用在SELECT语句,以及子句 where order by having 中 UPDATE DELETE

函数中能够将字段名做为变量来用,变量的值就是这个列对应的每一行记录

1、字符串函数

PHP中有的函数,mysql中大部分也提供

一、  CONCAT(s1,s2,……,sn):把传入的参数链接成一个字符串

select concat(name,” age is ”,age);

二、  INSERT(str,x,y,insert):将字符串x位置开始,y个字符串长度替换为字符串insert   select insert(“abcdef”,2,3,’hello’);

三、  LOWER(str) UPPER(str):将字符串转为小写或大写

四、  LEFT(str,x) RIGHT(str,x):分别返回最左边的x字符,和最右边的x个字符,若第二个参数为NULL,则什么也不返回

五、  LPAD(str,n,pad), RPAD(str,n,pad):用字符串pad对str最左边和最右边进行填充,直到长度为n个字符长度

六、  TRIM(str), LTRIM(str) Rtrim(str):去掉字符串两边,左边和右边字符串的空格

七、  replace(str,a,b):用字符串b替换字符串str中的全部出现的字符串a

八、  strcmp(s1,s2):若是s1比s2小,则返回-1,大,返回1,相等,返回0

九、  substring(str,x,y):返回字符串中的第x位置起y个字符串长度的字符

2、数值函数

ABS(X):返回x的绝对值

ceil(x):返回大于x的最小整数

floor(x):返回小于x的最大整数

mod(x,y):返回x/y的模

rand() 0到1之间的随机  ceil(rand()*100)

round(x,y):返回参数x的四舍五入的有y位小数的值

truncate(x,y):返回数字x截断为y位小数的结果

3、日期函数

用PHP的时间戳来完成

curdate()返回当前日期 2014-12-21

curtime()返回当前时间 10:43:45

now()返回当前日期、时间

unix_timestamp(date()/now())返回时间戳

from_unixtime()

week()

year()

hour(curtime()/new())

minute()

monthname(now())

date_format(now(), “%Y-%m-%d %H:%i:%s”)

……….

4、流程控制函数(实现条件选择)

If(value ,t f)  select id,salary,if(salary>3000,’hight’,’low’) from

Ifnull(value1,value2)

case when [value1] then[result1]…..else[default] end

      selet case when salary<=3000 then ‘low’ else ‘high’ end from

5、其余函数

database()当前数据库名

version()当前数据库版本

user()当前用户

inet_aton(ip)数据表示IP地址  IP地址的网络字节顺序

inet_ntoa()返回数字(网络字节地址

password()将字符串加密 41位 设置系统用户密码

         select * from mysql.user \G;

md5()对应用程序用户加密

 

php处理数据库

链接数据库 mysql_connect(); 主机 用户名 密码  返回链接的资源 mysql_pconnect持久链接,不能使用mysql_close关闭,建议使用

选择数据库 mysql_select_db(); 数据库名 资源(可选)

解决错误:if(!$result){

                                     Echo “ERROR”.mysql.error().”:”.mysql_error();

                                     Exit;

}

‘{$_GET[“name”]}’   ‘共{$total}条记录’

最后的ID mysql_insert_id()

影响的行数 mysql_affected_rows()

处理结果集

1、从结果集中将记录取出

Mysql_fetch_row()//返回索引数组

Mysql_fetch_assoc()//返回关联数组(下标,就是列表)

以上两个使用哪一个都行,没有效率之分

Mysql_fetch_array()//返回索引和关联两个数组   不建议使用

Mysql_fetch_object()//将一条记录以对象的形式返回   不经常使用

 

参数都是结果集,用法同样,一次从结果集取出一条记录,将指针移到下一条记录(默认是第一条记录,使用Mysql_data_seek($result,row)能够改),再取就是下一条记录,若是到结尾则返回false

Mysql_data_seek($result,3)移动内部结果的指针

2、获取字段信息

共有列数、行数:mysql_num_fields($result) 列数mysql_num_rows($result)行数

字段名mysql_field_name()  mysql_field_type()

释放结果集mysql_free_result()

使用mysqli扩展库操做mysql数据库(78)

从php4.1开始可使用mysqli,是一种面向对象的技术(新加功能都会以对象形式添加),但也支持过程化的使用方式

i表示改进,功能增长,效率提升,更稳定,之后php项目改用mysqli

mysqli扩展中提供三个类:

  1. mysqli和链接有关的类
  2. mysqli_result表达了对数据库的查询所返回的结果集

以上两个类就能够完成mysql扩展功能

  1. mysqli_stmt

选择过程化编程仍是面向对象技术:

         就算是使用mysqli中过程化的编程方式也比使用mysql编程方式功能强、效率高、更稳定,但尽可能不使用过程化方式,使用mysqli扩展就要使用面向对象的编程方式进行开发

面向对象方式:

  1. mysqli  和链接有关的类

链接数据库:

1.Mysqli_connect() 主机 用户名 密码 数据库名 端口

     $mysqli=new mysqli(“localhost”,”root”,”123456”,”xsphpdb”);

     If(mysqli_connect_errno()){

                   Echo  “链接数据库失败:”.mysqli_connect_error();

                   $mysqli=null;

                   Exit;

}  建议使用这种链接方式

  $mysqli->select_db(“xsphpdb”);

  2.Mysqli_init()

$mysqli=mysqli_init();

$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT,5);//设置选项 选项名 选项值   设置链接的秒数

         $mysqli->read_connect(“localhost”,”root”,”123456”,”xsphpdb”);

 

Eg:$mysqli=new mysqli(“localhost”,”root”,”123456”,”xsphpdb”);

     If(mysqli_connect_errno()){

                   Echo  “链接数据库失败:”.mysqli_connect_error();

                   $mysqli=null;

                   Exit;

}

Echo $mysqli->character_set_name().”<br>”;

Echo $mysqli->get_client_info().”<br>”;

Echo $mysqli->host_info.”<br>”;

Echo $mysqli->server_info.”<br>”;

Echo $mysqli->server_version.”<br>”;

$mysqli->close();

执行SQL语句(select语句、非select语句影响行数)

$mysqli->query($sql);

获取错误号、错误信息

Echo “ERROR”.$mysqli->errno.”|”.$mysqli->error;

影响行数

Echo $mysqli->affected_rows;

最后自动增加的ID/最后插入的ID

$mysqli->insert_id;

使用mysqli处理结果集(79)

结果集类mysqli_result

  1. 使用select语句后,获得的结果集的处理

1、处理记录

属性:num_rows

方法:data_seek()

$result->fetch_row()  索引数组

$result->fetch_assoc()  关联数组

$result->fetch_array()  两个数组都返回(MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH默认)

$result->fetch_object()

 

每次执行一次就会从结果集中取出当前记录(默认是第一行,可使用data_seek(5)从第五行开始取),指针指向下一行,下次再取时就会取出下一行,当结果集中没有记录时,则返回false

 

2、处理字段信息

Field_count列数

Current_field当前列

Lengths全部列长度

$field=$result->fetch_field(); $field->name/orgname/max_length/;

$result->data_seek(40);//移动记录指针

$result->field_seek(2);//移动字段指针

$fields=$result->fetch_fields()取出全部列,做为数组

$result->current_field当前列列号

Eg:$mysqli->new mysqli(“localhost”,”root”,”123456”,”xsphpdb”);

   If(mysqli_connect_errno()){

    Echo mysqli_connect_error();

   Exit;

}

$sql=”select * from shops”;//”desc shops”

$result=$mysqli->query($sql);

Var_dump($result);

$rows=$result->num_rows;

$cols=$result->field_count;//获取列的个数

Echo  “表中{$rows}行,{$cols}列<br>”;

While($row=$result->fetch_assoc()){

    Print_r($row);

   Echo  “<br>”;

}

$result->close();

$result->free();

$result->free_result();

$mysqli->close();

使用mysqli扩展完成事务处理和一次执行多条SQL语句(80)

1、使用mysqli执行多条语句

执行多条SQL语句,没有结果集

$sqls=”insert into shops(name,price,num,desc) values(‘xsphp’,’12’,’279’,’verygood’);update shops set name=’LAMP’ where id>40;delete from shops where id<30”;

$mysqli->multi_query($sqls)

执行多条SQL语句,有结果集

$sqls=”select current_user();desc shops;select * from shops;select current_date()”;

$mysqli->multi_query($sqls)

$result=$mysqli->store_result();获取第一个SQL语句结果集

$mysqli->next_result();获取下一个结果集

$mysqli->more_results();是否还有结果集

2、使用mysqli完成事务处理

事务处理,多个SQL要完成的任务当作是一个事务,有任何一个环节出错,都将整个事务撤销,若是都成功才提交。目前只有InnoDB和BDB才支持事务

把多条语句当作一个事务的时候才使用事务处理

Create table …type=InnoDB;

默认表都是自动提交的,插入数据不能回滚

  1. 关闭自动提交 set autocommit=0;
  2. 开启事务start transaction;
  3. 回滚 rollback;
  4. 手动提交 commit;

Eg:

$mysqli=new mysqli(“localhost”,”root”,”123456”,”xsphpdb”);

$mysqli->autocommit(0);关闭自动提交

$error=true;

$price=50;

$sql=”update zh set ye=ye-{$price} where name=’zhangsan’”;

$result=$mysqli->query($sql);

If(!$result){

         $error=false;

         Echo  “从张三转出失败<br>”;

}else{

         If($mysqli->affected_rows==0){

         $error=false;

         Echo  “张三的钱没有变化<br>”;

}else{

         Echo  “从张三帐号中转出成功<br>”;

}

}

$sql=”update zh set ye=ye+{$price} where name=’lisi’”;

$result=$mysqli->query($sql);

If(!$result){

         $error=false;

         Echo  “从李四转入失败<br>”;

}else{

         If($mysqli->affected_rows==0){

         $error=false;

         Echo  “李四的钱没有变化<br>”;

}else{

         Echo  “向李四帐号中转入成功<br>”;

}

}

 

If($error){

         Echo  “转帐成功”;

         $mysqli->commit();

}else{

         Echo  “转帐失败”;

         $mysqli->rollback();

}

$mysqli->autocommit(1);

$mysqli->close();

3、其余的mysqli类中成员的使用

$mysqli->query(“set names gbk”);

$mysqli->set_charset(“utf8”);

使用php中的mysqli扩展中预处理语句(81)

预处理类mysqli_stmt(推荐使用)  语句同样,值不相同时使用

优势(与mysqli和mysqli_result相比):

  1. mysqli和mysqli_result能完成的功能均可以使用mysqli_stmt完成
  2. 效率高,若是执行屡次相同的语句,只有语句的数据不一样,由于将一条语句在服务器端准备好,而后将不一样的值传给服务器,再让这条语句执行。编译一次,执行屡次
  3. 安全上,防止SQL注入(?占位符),后期传的值不会当成SQL语句

Select * from article where title like %select * from mysql.user%;

最后ID $stmt->inser_id

影响行数$stmt->affected_rows.”行<br>”;

Eg:

$mysqli=new mysqli(“localhost”,”root”,”123456”,”xsphpdb”);

//$stmt=$mysqli->stmt_init();//返回类mysqli_stmt的对象

准备一条语句放到服务器中,插入语句

$sql=”insert into shops(name,price,num,desn) values(?,?,?,?)”;

$sql=”update shops set name=?,price=?,num=?,desn=? Where id=?”;

//$stmt->prepare($sql);//为执行准备一个SQL语句

$stmt=$mysqli->prepare($sql);//mysqli中预处理方法,直接生成预处理对象

给占位符号每一个?传值(绑定参数)

$stmt->bind_param(“sdis”,$name,$price,$num,$desn);// bind_param(类型,变量,变量,变量)参数类型 I整型 d double型s字符串 b二进制大数据

$name=”zhangsan”;

$price=”57748”;

$num=45;

$desn=”good”;

执行

$stmt->execute();

 

$name=”lisan”;

$price=”57748”;

$num=45;

$desn=”select *from”;//SQL语句在这里当作数据传送,并不做为语句执行

执行

$stmt->execute();

 

$stmt->close();

Eg:

$mysqli=new mysqli(“localhost”,”root”,”123456”,”xsphpdb”);

$sql=”select id,name,price,num,desn from shops where id>?”;

$stmt=$mysqli->prepare($sql);

$stmt->bind_param(“i”,$id);

$stmt->bind_result($id,$name,$price,$num,$desn);//绑定结果集

 

$id=99;

$stmt->execute();//返回布尔型真假,而不是结果集

$stmt->store_result();//一次性将结果都取出来

//字段信息

$result=$stmt->result_metadata();//返回结果集对象,但可使用的方法不多都与字段有关,因此不能经过它来获取记录信息

While($field=$result->fetch_field()){

         Echo $field->name.”--”;

}

Echo “<br>”;

$stmt->data_seek(2);//移动指针 受store_result()影响

While($stmt->fetch()){//返回布尔型真假

Echo  “$id--$name--$price--$num--$desn<br>”;

}

Echo “记录总数:”.$stmt->num_rows; 受store_result()影响

$stmt->free_result();

$stmt->close();

Php中使用MySQL的视图

视图:视图是存放数据的一个接口,也能够说是虚拟表,这些数据可使从一个或几个基表(视图)的数据,也能够是用户本身定义的数据,其实视图里不存放数据,数据仍是存在基表里,基表数据发生变化,视图里数据变化,基表也会变化

视图做用:视图可让查询变得很清楚(让复杂的SQL语句变得很简单);

                     保护数据库重要数据,给不一样的人看不一样的数据

建立视图:

Create [or replace][algorithm={merge|temptable|undefined}]

View view_name[column_list]

As select_statement

[with[cascaded|local] check option]

视图名不能与表名重复

视图类型:merge  组合 会将引用视图的语句的文本与视图的定义结合起来,使视图定义的某一部分取代语句的对应部分

                     Temptable 临时表

                     Undefined

With local check option  只要知足本视图的条件就能够更新

With cascaded check option 必须知足全部针对视图的条件才能够更新

Create view studeng_view as select name,age,sex,email from student;

更改视图alter view stuv…

删除视图 drop view stuv,stu4,…

查看视图 show tables  show tables status like ‘’ \s  show create view stu2 \G

Create view user_view(username,password) as select name,pass from users;

PDO(8三、84)

Php data object

基于驱动(对外的接口同样)  php_pdo_mysql.dll mysql驱动

Pdo在Linux下安装:--with-pdo-mysql=/user/local/mysql

Pdo提供了三个类:PDO类   和数据库链接有关的类(链接,执行SQL语句)

                  PDOSatement类  准备语句,处理结果集

                  PDOException类 异常类

                  不少常量,不少更能靠常量实现

建立PDO对象:

PDO__consruct(string dsn[,stringusername[,string password][,array driver_options]])

$pdo=new PDO($dsn,”root”,”123456”);

Dsn data source name 数据源   主机位置 库名  链接哪一种数据库的驱动

$pdo=new PDO(“oci:dbname=//localhost:1521/xsphpdb”,”root”,”123456”);

$pdo=new PDO(“mysql:host=localhost;dbname=xspgpdb;port=3306”,”root”,”123456”);

$pdo=new PDO(“mysql:host=localhost;dbname=xspgpdb”,”root”,”123456”);

$pdo=new PDO(“uri:dsn”,”root”,”123456”);//dsn为文件名  远程链接文件

也能够把dsn写到php配置文件中,只需写入下面的代码:

[PDO]

Pdo.dsn.mysqlpdo=mysql:host=localhost;dbname=xsphpdb

 

$pdo=new PDO(“mysqlpdo”,”root”,”123456”);

 

第四个参数[,array driver_options],对pdo对象调优用的或底层驱动的设置

PDO执行SQL语句的三种方法:1.exec()  用来执行有影响行数的 update delete insert other 返回影响的行数

         2.query()  执行有结果集的SQL语句  返回预处理的对象

         3.prepare()

 

设置错误报告模式:pdo中提供三种错误处理模式 ERRMODE_SILENT/0  ERRMODE_WARNING/1  ERRMODE_EXCEPTION/2

经常使用模式:

<?php

    try{

       $pdo=new PDO("mysql:host=localhost;dbname=kaoshi","root","wen");

       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

       //$pdo->setAttribute(PDO::ATTR_ERRMODE, 2);

    }catch(PDOException $e){

       echo "数据库链接失败:".$e->getMessage();

       exit;

    }

    try{

       $affected_rows=$pdo->exec("insert into veling_drive_adminuser(name,password) values('zhangsan','abc')");

       echo "最后插入的自动增加的ID: ".$pdo->lastInsertId();

    }catch(PDOException $e){

       echo $e->getMessage();

    }

事务处理:InnoDB

set autocommit=0;

start transaction;

使用PDO进行SQL语句预处理和操做结果集(85)

PDOStatement类

准备一个语句  和在PDO中对象的exec()以及query()相比执行效率高、安全性高

处理结果集

PDO中有两种占位符号:?参数   索引数组,按索引顺序使用

$stmt=$pdo->prepare(“insert into zhanghao(name,price) values(?,?)”);

                       名字参数   关联数组,按名字使用,和顺序无关

$stmt=$pdo->prepare(“insert into zhanghao(name,price) values(:name,:price)”);

$stmt=$pdo->prepare(“update zhanghao set name=:name,price=:price”);

 

绑定参数

$stmt->bindParam(1,$name,PDO::PARAM_STR);//类型 PDO::PARAM_BOOL PDO::PARAM_NULL

                                   PDO::PARAM_LOB PDO::PARAM_INPUT_OUTPUT

$stmt->bindParam(:price,$price,PDO::PARAM_INT);

提供不提供可选类型,都会自动转类型,因此类型没必要要写

最后插入的ID:$pdo->lastInsertId()

简单的方式:

try{

    $pdo=new PDO("mysql:host=localhost;dbname=kaoshi","root","wen");

}catch(PDOException $e){

    echo $e->getMessage();

}

$stmt=$pdo->prepare("insert into zhanghao(name,price) values(:name,:price)");   

//$stmt->execute($_POST);

$stmt->execute(array(":name"=>"wetrn",":price"=>"89079"));

$stmt->execute(array(":name"=>"weytn",":price"=>"85479")); 

$stmt->execute(array(":name"=>"wehn",":price"=>"89789"));

 

获取结果:fetch()默认返回关联和索引两种数组,传递常量PDO::FETCH_ASSOC返回关联数组,PDO::FETCH_NUM返回索引数组  fetchAll()

Memcached的安装及管理

Memcached内存对象的缓存系统

1、Memcache概述

Memcache ( 内存 缓存):是一个高性能的分布式的内存对象缓存系统,经过在内存里维护一个巨大的hash表     hash表是由键-值对(key=value)

Memcache 就是一个软件(服务软件) c/s软件  用来维护内容,是将数据在内存中使用,减小I/O    开源

服务器端软件,也须要监听IP地址(129.121.11.111),也有默认端口(11211)

2、Memcache工做原理

Memcache 软件;Memcached 进程,是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的链接和操做

客户端使用各类语言编写,好比:php、java、c、c++等

3、Memcache安装

基于libevent事件

Windows下的安装

在appserv下新建文件夹mem,在cmd中进入mem目录,键入dir回车,键入memcached.exe –d install回车,把memcache安装到系统服务中,键入memcached.exe –d uninstall回车能够卸载,键入memcached.exe –d start回车(memcached.exe –d –m 50 –l 127.0.0.1 –p 11211 start,-m指定内存大小,默认64M,-l指定监听IP地址,默认为127.0.0.1,-p指定端口号,端口范围1024-65535),启动。默认IP为本机IP地址,端口为11211

启动后,在任务管理器中就有一个memcached.exe进程,监听IP为本机IP,监听端口为11211

 

 

 

 会话控制:

   会话控制  

网页跟踪用户须要使用会话控制完成

HTTP协议是一种无状态协议

  1. 变量只能在一个页面中使用
  2. Get和post方法两个页面之间传递(不适合大量数据)
  3. 将变量存在文件或数据库中(全部人共用变量)

File_put_contents(“var.txt”,$var);//一个PHP文件

Echo file_get_contents(“var.txt”);//另外一个PHP文件

  1. 跟踪用户 cookie session

   Cookie技术

       服务器给客户端(浏览器)的礼物 就是借助客户端电脑的一个文件来保存这个用户信息,再访问同一个网站的各个页面都会带这些信息过去,服务器 在每一个页面只要经过这些信息就能区分用户

       Cookie是经过头信息发送的,服务器向客户端发送数据时先是状态再是头信息再是内容,因此在设置cookie以前不要有任何输出包括空格

       Setcookie(变量名,变量值,保存时间,[服务器端指定路径可使用cookie]…)

   Session技术

       在服务器端保存用户信息

     每个用户有一个Sessionid能够惟一确认用户信息,sessionid保存在客户端,有两种方式,一种基于cookie,另外一种基于URL

会话控制高级用法(session)

     PHP中经常使用配置文件选项:

       Session.name

       Session.use_trans_sid  是否启用SID的支持,默认值为0,禁用

       Session.save_path

       Session.use_cookies

       Session.cookie_path

       Session.cookie_domain

       Session.cookie_lifetime

       Session.save_handler

       Session.gc_maxlifetime  gc,garbage collection的缩写,垃圾回收,指定过多少秒以后数据就会被视为垃圾并被清除,但并不会自动清除文件

下面两个合起来就是启动垃圾进程管理几率的,初始化时(session_start())启动,即用Session.gc.probability/ Session.gc_divisor(例如:1/100,便是百分之一的几率启动gc)

 

Session.gc.probability

       Session.gc_divisor

 

Ajax介绍和引擎对象的建立

Ajax  Asynchronous 异步传输 JavaScript and XML

1、Ajax的介绍和优势

Ajax采用异步交互过程

使用Ajax的地方:

局部刷新

按需取数据

        

2、建立Ajax对象

Var request=new XMLHttpRequest();

建立对象过程比较复杂,但这些代码是固定的

将建立XMLHttpRequest对象的过程写到一个函数中

主要把浏览器分红两种,一种是IE系列的浏览器,一种是非IE浏览器(都是按W3C标准)

建立对象:

function createAjax1(){

       var request=false;

       //window对象中有XMLHttpRequest存在就是非IE,包括(IE7,IE8)

       if(window.XMLHttpRequest){

           request=new XMLHttpRequest();

           if(request.overrideMimeType){

              request.overrideMimeType("text/xml");

           }

      

       //window对象中有ActiveXObject属性存在就是IE

       }else if(window.ActiveXObject){

           var versions=['Microsoft.XMLHTTP','MSXML.XMLHTTP','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP'];

           for(var i=0;i<versions.length;i++){

              try{

                  request=new ActiveXObject(versions[i]);

                  if(request){

                     return request;

                  }

              }catch(e){

                  request=false;

              }

           }

       }

       return request;

    }

    var ajax=createAjax1();

使用Ajax对象中的属性和方法完成对服务器的请求和响应(94)

 

请求服务器:Open() method: GET POST  服务器地址  

若是使用get将数据传给服务器,则服务器就使用$_GET接收    直接经过URL将数据传给服务器  使用POST时必定要使用:

ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

使用Ajax请求服务器,使用Ajax中的方法实现

经过Ajax获取服务器发送的数据,是用Ajax的属性实现

相关文章
相关标签/搜索