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的屬性實現

相關文章
相關標籤/搜索