php3:跨平台的伺服器端嵌入式指令碼語言

來源:互聯網
上載者:User

 

    伺服器端指令碼技術是一種非常有用的東西,將它和用戶端指令碼技術聯合起來應用可以 製作出功能極其強大的頁面。好象很久以前有一陣子哪個版(似乎是WWW版)上討論ASP 到了熱火朝天的地步,還有人提議開個ASP版,那就是一種伺服器端指令碼技術。 通常用的伺服器端指令碼技術是CGI,NSAPI/ISAPI/FastCGI等等都是對它的改善和擴充。 至於用什麼語言來實現CGI技術,沒有任何規定,大家一般使用Perl,因為它的字元  功能比較強大。到了需要速度的場合,就用C來實現。
  

用Perl/C等寫的CGI指令碼是一種“非嵌入式”的伺服器端指令碼,因為它是一個單獨的程式,  而不是嵌在HTML文檔中再通過另一個程式解釋替換。

 

例如,下面的Perl程式:
   print "Content-type:text/html\n\n";
   print <<HeadofHTML;
   <HTML>
   <HEAD>
   <TITLE>Hello!</TITLE>
   </HEAD>
   <BODY>
   HeadofHTML
   print "<CENTER>aaa</CENTER>";
   print "</BODY></HTML>";
  它中間雖然也有一段似乎是HTML文檔,但那是HTML文檔嵌入了Perl程式,而不是反過來。 IDC/HTX,ASP等是嵌入式的伺服器端指令碼,下面的例子是一個mSQL Lite指令碼:
   <HTML>
   <HEAD>
   <TITIE>
   <!
   echo "Hello!";
   >
   </TITLE>
   </HEAD>
   <BODY>
   </BODY>
   </HTML>
  這個指令碼經過伺服器端的解釋程式後,<!...>被替換成其輸出。 PHP是一種跨平台的伺服器端指令碼技術。它最初是一個人為了寫他的首頁而用Perl寫 的"封裝"程式,後來因為用的人多了,就發展了起來,現在已經是3.0版,用C實現, 在Unix和Windows 95/NT下都可以跑起來。
   
  PHP3.0有幾個平台下的編譯好的版本,也有源碼版本。 PHP3.0內部帶了對幾種常用資料庫的支援,包括:Sybase,Oracle,mSQL,mySQL,PostgresQL, ODBC,dBase等。如果編譯它的源碼時選擇對這些資料庫中某幾個的支援,那麼必須事先 有它們的客戶庫。


  在Unix下編譯的方法是:先解壓,然後運行"./configure [選項]"(選項見README檔案), 再運行"make"和"make install". 選項中比較重要的有:"--enable-msql=msql庫路徑"等資料庫選項和"--enable-apache= apache來源程式路徑"等。 如果選擇了--enable-apache,那麼編譯出的將是一個庫檔案,make install將把這個庫 安裝到apache來源程式中,然後再編譯apache,可以得到支援php的apache伺服器。否則, 產生的將是一個解釋程式。

 
  具體請看README檔案。  在Windows下,有一個安裝程式,介面不太好,而且有幾個檔案會報告找不到,跳過就是 了。裝上後要把php3目錄設成網路可執行檔。Readme中說要手工修改Registry,但似乎用 不著。 文檔不是太好,因為3.0的文檔還沒寫全,而2.0的文檔又有些過時了。
  安裝上之後,系統應該支援對.php3和.phps檔案的HTTP讀取了。(在Unix下需要修改服務 器的srm.conf檔案,具體看README).


  如果安裝時連進了apache伺服器,那麼速度應該是最快的。如果作為CGI程式執行,速度 也還將就。如果系統支援FastCGI,那麼解釋程式也可以作為FastCGI程式運行。Windows下 支援ISAPI的解釋程式還沒有出來。
  
     現在我們來看看第一個php3指令碼,照例是Hello,world. 
   <HTML>
   <HEAD>
   <TITLE>First PHP3 Script</TITLE>
   </HEAD>
   <BODY>
   <CENTER>
   <?
   echo "Hello, world!";
   ?>
   </CENTER>
   </BODY>
   </HTML>
  
   把它放在任何一個能通過HTTP訪問到的目錄,取名hello.php3,再用瀏覽器串連 該檔案,就可以看見其效果了(不用我寫了吧.)
   如果把它改名成hello.phps,再用Netscape或Explorer串連,可以看見加了顏色 的源碼,因為解譯器在遇到.phps檔案時會對它進行文法加亮的處理,在裡面加上很多顏色 控制符再送出.  並不需要手工指定解譯器所在位置,因為如果在Apache伺服器下,srm.conf裡面可以 指定,在Microsoft IIS 或 PWS下,Registry裡面會指定.


   從上面的例子應該很容易看出php3檔案的寫法.用<?和?>括起來的部分就是php3 程式段,解譯器對其餘部分不作處理,將這些程式段執行後以其輸出代替(echo語句輸出一 個無格式字串,printf語句類似於C的同名函數.)  同樣可以看出,php3程式雖然是文本,但用戶端只能看見解釋後的結果(除非你提供同名的phps檔案),因此對用戶端是保密的,這也是絕大部分伺服器端指令碼的特點.

 
  PHP和一般的解釋性語言一樣,不需要事先定義變數.如果你試著使用一個 沒有賦過值的變數,那麼返回的值是Null 字元串.對一個變數賦值則也就同時分配了 這個變數的記憶體.  PHP的變數名前面必須有一個$號,這也是很多指令碼語言的慣例了.

例如:
   $a=1;
   $b=1.0;
   $c="Hello!";
   都是合法的PHP語句.
   PHP中的數組是這樣定義的:
   $a[1]="a";
   $a[2]="b";
   它會自動擴充,不必預先設定上限.
   其實數組下標也可以是一個字串,例如:
   $a["a"]=1;
   $a["b"]="Hello!";
   這時它實際上是一個雜湊表,就象Tcl中的所謂數組一樣.
   PHP中有一種類似於指標的用法,例如:
   $a = "b";
   $$a = "c";
   則後一句產生了一個$b變數並給它賦值"c".
   PHP變數之間的運算子和C的類似,例如也有:
   +,-,*,/,%,^,&,|,&&,||,!,+=,-=,++,--等
   PHP3.0定義了一個字串相加運算子".",和Perl的一樣.
   PHP的變數類型可以自動轉換,如果需要強制轉換,做法和C的一樣.它有Integer,
  Double,String三種簡單類型.
   要遍曆一個雜湊表,可以這樣:
   $i["a"] = 0;
   $i["c"] = 1;
   reset($i);
   for ($j=1;$j<=count($i);$j++) {
   $k = key($i);
   echo "$k, $i[$k]";
   echo "<BR>";
   next($i);
   }
   PHP中的控制流程語句與C幾乎完全一樣,也有if...else,while,for,switch,break,
  exit.
  
     PHP3.0中的函數如下例:
   function test($a, $b) {
   return $a*2+$b;
   }
   和C差不多.
   函數可以遞迴調用.
   PHP3.0的變數範圍規定也類似於C,即預設認為主程式中的變數是全域 變數,而函數中的變數都是局部變數,即使有同名的全域變數也不使用.  如果在函數中要使用全域變數,則必須在函數頭上用global語句聲明,

 例如:
   function ...{
   global $a, $b;
   ...
   }
   如果函數頭上用static語句聲明了一些變數,那麼這些變數是靜態,其  含義與C語言中的相同.  PHP中提供include語句,類似於C的#include. include語句包含的可以是任意檔案,它的內容將出現在最後輸出的頁面 上.如果該檔案中有<?...?>括起的部分,則該部分將被PHP解譯器解釋執行,否則 該檔案的內容原封不動地送出.  它包含的檔案名稱可以是絕對或相對路徑,也可以是一個http或ftp的URL, 在後一種情況下,解譯器自動取來該URL內容.用這種方法甚至可以觸發一個別的 機器上的CGI程式. readfile語句類似於include,但它不執行檔案中的PHP程式,只把檔案原 封不動地送出.這時被包含的檔案中的<?...?>將被瀏覽器理解為注釋.
   PHP3.0中的字串操作功能是比較多的,重要的有以下這些:
   (1)echo,print,printf,sprintf
   前兩個函數是輸出字串.字串中如果有變數名則被替換成其值. 後兩個函數類似於C的同名函數.
   (2)strchr,strlen,strtok,strrchr,strrev,strstr,strtolower,
   strtoupper,substr,ucfirst
   這些是常用的字串操作函數,有些和C中的同名函數意義完全一致.  strrev是把一個字串翻轉. strtolower和strtoupper的意思應該不用解釋了.  ucfirst是把字串的第一個字元變成大寫.  substr是返回字串的一個子串,用法是:substr(字串,頭,長度).頭位置是從0算起的.如果是負數,則是從尾部向前數的意思.
   (3)Chr,Ord
   類似於C的同名函數.
   (4)explode,implode,join
   這些是和數組有關的函數.  explode(字串,分割符)返回一個將字串在分割符處分開所產生的數組. implode(數組,分割符)返回一個將數組各元素之間插上分割符而成的字串. join與implode意義相同.
   (5)Chop
   去掉字串尾部的空白.
   (6)htmlspecialchars
   將字串中的HTML特殊字元換成它們的名字,例如"<"變成"<".
   (7)nl2br
   在字串中的每一個斷行符號前面加上"<BR>".
   (8)AddSlashes,StripSlashes
   分別給字串中需要加上"\"才能用於資料庫查詢的字元加上和去掉"\".
   (9)parse_str
   將"name1=value1&name2=value2&..."類型的字串分析成一些變數.
   例如:
   parse_str("a=1&b=2");
   產生$a與$b兩個變數,值分別為1,2. 如果有兩對名字/值的名字部分相同,則後一個的值覆蓋前一個的.  如果這兩對的名字尾部都有"[]",例如"a[]=1&a[]=2",則產生數組$a,兩個元素分別為1,2.
  
   PHP與其它跨平台語言(也許Java不在其列. :))類似,也有正規運算式功能.PHP3.0的正規運算式功能當然遠遠比不上Perl,但還是足夠用的,主要函數有這麼些:
   (1)ereg,eregi
   這是正規運算式匹配函數,前者是大小寫有關匹配,後者則是無關的.
   用法:
   ereg(正規運算式,字串,[匹配部分數組名]);PHP3.0中的正規運算式大體類似於grep中用的.

 (2)ereg_replace,eregi_replace
   這些是替換函數.
   用法:
   ereg_replace(正規運算式,替換串,原字串);   字串處理函數中有一個strtr,是"翻譯"函數,類似於Perl中的tr/.../.../,
  用法:
   strtr(字串,"從","到");
   例如:
   strtr("aaabb","ab","cd")返回"cccdd".
   (3)split
   與explode函數有些類似,但這次可以在匹配某正規運算式的地方分割字串.
   用法:
   split(正規運算式,字串,[取出前多少項]);
  
  標 題: php3:跨平台的伺服器端嵌入式指令碼語言(8)
  
   PHP3.0中的檔案操作函數大體和C的類似,但有一些擴充,特別是除了支援對本機檔案的訪問外,也支援對HTTP和FTP的URL進行訪問,只要把這些URL作為檔案 名傳遞給檔案操作函數就可以了.
   主要的檔案操作函數有:
   (1)fclose,feof,fgetc,fgets,fopen,fputs,fseek,ftell,mkdir,readlink,
   rename,rewind,rmdir,stat,unlink
   這些和C語言中的同名函數都差不多.

(2)chgrp,chmod,chown,copy
   這些的意思也都應該容易理解:
   chgrp(檔案名稱,組);
   chmod(檔案名稱,模式);
   chown(檔案名稱,使用者);
   copy(源檔案名稱,目標檔案名);
   注意這些函數用的是檔案名稱而不是fopen返回的檔案號.
   (3)file_exists,fileatime,filectime,filegroup,fileinode,filemtime,
   fileowner,filesize,filetype,fileperms,fileumask,is_dir,
   is_executable,is_file,is_link,is_readable,is_writeable
   這些是檔案資訊函數,大多是接受一個檔案名稱作為參數的.
   (4)fgetss
   用法:
   fgetss(檔案號,最大長度);
   讀取檔案的一行或直到最大長度(類似於fgets),但去掉所有的
   HTML和PHP標記.
   (5)file
   用法:
   file(檔案名稱);
   返回一個數組,每一個元素是檔案中的一行.
   (6)tempnam
   用法:
   tempnam(目錄名,首碼);
   返回一個臨時檔案名稱.
   (7)basename,dirname
   取得檔案路徑中的檔案名稱部分和目錄名部分.
   在Windows系統下,"/"和"\"都可以作為目錄分割符,其他系統下只有"/"可以.
  
     PHP中的目錄遍曆功能本來也很普通,但它卻具有一種"物件導向"的形式, 所以也提一下:
   (1)dir,opendir
   用法:
   $d = dir("目錄名");
   $handle = opendir("目錄名");
   前者返回一個目錄對象,後者返回一個目錄控制代碼.
   前者返回的對象有handle和path兩個屬性,第一個就相當於opendir
   返回的控制代碼,第二個就是目錄名本身.訪問時用$d->handle和$d->path.
   (2)read,readdir;rewind,rewinddir;close,closedir;
   三組中每組的前一個是目錄對象的方法,用"對象->方法()"調用,
   後一個是函數,用"函數名(目錄控制代碼)"調用.
   read是返回目錄中的下一個檔案名稱.
   rewind是回到目錄的第一個檔案名稱.
   close是關閉目錄,不再遍曆.
   (3)chdir
   轉換PHP的工作目錄.
  
     PHP中的時間函數有這麼些:
   (1)date
   用法:
   date(格式,[時間]);
   如果沒有時間參數,則使用目前時間.
   格式是一個字串,其中以下字元有特殊意義:
   U 替換成從一個起始時間(好象是1970年1月1日)以來的秒數
   Y 替換成4位的年號.
   y 替換成2位的年號.
   F 替換成月份的英文全稱.
   M 替換成月份的英文簡稱.
   m 替換成月份數.
   z 替換成從當年1月1日以來的天數.
   d 替換成日數.
   l 替換成星期幾的英文全稱.
   D 替換成星期幾的英文簡稱.
   w 替換成星期幾(數字).
   H 替換成小時數(24小時制).
   h 替換成小時數(12小時制).
   i 替換成分鐘數.
   s 替換成秒數.
   A 替換成"AM"或"PM".
   a 替換成"am"或"pm".
   S 替換成序數字尾碼,例如:"st","nd","rd","th".
   函數返回作過了替換的格式串.
   (2)getdate(時間)
   返回一個雜湊表,各下標是:
   "seconds" -- 秒數
   "minutes" -- 分數
   "hours" -- 小時數
   "mday" -- 日數
   "mon" -- 月份數
   "year" -- 年號
   "yday" -- 1月1日以來的天數
   "weekday" -- 星期幾,英文全稱
   "month" -- 月份,英文全名
   (3)gmdate
   與date類似,但先將時間轉換成格林威治標準時.
   (4)mktime
   用法:
   mktime(小時數,分數,秒數,月,日,年);
   返回一個時間值,可用於其他函數.
   (5)time
   用法:
   time();
   返回1970年1月1日零點以來的秒數.
   (6)microtime
   用法:
   microtime();
   返回一個字串,用空格分成兩部分,後一部分相當於time()
   的傳回值,前一部分是微秒數.
   (7)checkdate
   用法:
   checkdate(月,日,年);
   返回邏輯真或邏輯假.
   如果:
   [1]年在1900和32767之間(包括1900與32767);
   [2]月在1到12之間;
   [3]日在該月的允許日數範圍內(考慮了閏年);
   則返回邏輯真.
   (8)set_time_limit
   用法:
   set_time_limit(秒數);
   規定從該句運行時起程式必須在指定秒數內運行結束,逾時則程式出錯退出.
  
   PHP中有一組映像函數,可以動態產生gif格式的映像資料流並輸出到伺服器.  為了這組函數能夠工作,系統中必須有gd庫的支援.如果是在Unix下, 應該在編譯PHP之前先取得gd的源碼並編譯之,產生libgd.a和一些.h檔案,分別 拷到系統的庫目錄和標頭檔目錄中(例如/usr/lib和/usr/include);如果是在 Windows下,PHP3.0的安裝程式會安裝一個gd.dll檔案,在程式中加一句'dl("gd.  dll");'即可使用映像函數.
   主要的映像函數有:
   (1)ImageCreate(寬度,高度)
   返回一個映像描述符.
   (2)ImageCreateFromGif(檔案名稱);
   返回一個映像描述符.
   (3)ImageColorAllocate(映像描述符,紅,綠,藍);
   返回一個顏色描述符.由於Gif映像只能有256色,必須先對它分配調色盤,
  這個語句就是分配一個調色盤項.
   (4)ImageColorTransparent(映像描述符,顏色描述符);
   指定某顏色為透明色.
   (5)ImageArc(映像描述符,圓心橫座標,圓心縱座標,橢圓寬,橢圓高,起始
  角,終止角,顏色描述符);
   ImageChar(映像描述符,字型,x,y,字元,顏色描述符);
   ImageCharUp(映像描述符,字型,x,y,字元,顏色描述符);
   ImageCopyResized(靶心圖表像描述符,源映像描述符,目標x,目標y,源x,源y,
  目標寬,目標高,源寬,源高);
   ImageDashedLine(映像描述符,x1,y1,x2,y2,顏色描述符);
   ImageFill(映像描述符,起始點x,起始點y,顏色描述符);
   ImageFilledPolygon(映像描述符,各頂點數組,頂點數,顏色描述符);
   ImageFilledRectangle(映像描述符,x1,y1,x2,y2,顏色描述符);
   ImageFillToBorder(映像描述符,起始點x,起始點y,邊界色,填充色);
   ImageLine(映像描述符,x1,y1,x2,y2,顏色描述符);
   ImagePolygon(映像描述符,各頂點數組,頂點數,顏色描述符);
   ImageRectangle(映像描述符,x1,y1,x2,y2,顏色描述符);
   ImageSetPixel(映像描述符,x,y,顏色描述符);
   ImageString(映像描述符,字型,x,y,字串,顏色描述符);
   ImageStringUp(映像描述符,字型,x,y,字串,顏色描述符);
  
   這些都是畫圖函數,需要略做解釋的就是多邊形的頂點數組內依次存放著
  第一點x,第一點y,第二點x,第二點y,...
   (6)ImageLoadFont(檔案名稱);
   檔案應該是一個位元影像字型檔,返回一個字型號.系統預設帶有1-5字型號,  可以直接使用.
   (7)ImageSX,ImageSY
   分別得到一個映像的寬度和高度,接收一個映像描述符參數.

 (8)ImageColorAt(映像描述符,x,y);
   ImageColorClosest(映像描述符,紅,綠,藍);
   ImageColorExact(映像描述符,紅,綠,藍);
   ImageColorSet(映像描述符,顏色描述符,紅,綠,藍);
   ImageColorsForIndex(映像描述符,顏色描述符);
   ImageColorsTotal(映像描述符);
   前三個返回一個顏色描述符.ImageColorExact如果找不到匹配則返回-1.
   ImageColorsForIndex返回一個三項的數組,元素分別是紅,綠,藍值.
   ImageColorsTotal返回總顏色數.
   (9)ImageFontHeight,ImageFontWidth
   接收一個字型號作為參數.
   (10)ImageGif(映像描述符,[檔案名稱]);
   如無檔案名稱,則將gif資料流送往瀏覽器.這時程式一開始應該有一句:
   Header("Content-type: image/gif")
   (11)ImageDestroy(映像描述符);
  
   映像函數中有一個小Bug(至少在PHP3.0RC和PHP3.0RC3 For Unix的源碼中 已經發現,現在www.php.net上的下載檔案應該已經更改),就是ImageSetPixel總是 在(y,y)處畫點,不管x的值是什麼,不過這個問題不是很大.  PHP的資料庫功能應該說是它最有用的功能之一.它的特點就是內建了對很多 資料庫的支援,而不再需要重新擴充.Perl和Tcl也都是常用的跨平台語言,都有很強的字元能力,前者字元能力更 強一些,效能更高一些;而後者有GUI能力.它們都可以擴充以支援資料庫,但這時如果 仍舊希望應用程式有跨平台能力,則需要在各種平台上各自擴充,比如在Unix平台上 對Perl擴充DBI包,在Windows 95/NT下對Perl擴充Win32::ODBC包,有時候這是很麻煩 的.而PHP由於內建了資料庫支援,就為編程人員省去了這些麻煩.
   PHP3.0支援以下資料庫:
   Adabas_D,dBase,dbm,filePro,mSQL,MySQL,Sybase,Oracle,PostgreSQL,Solid  另外,支援Windows下的ODBC介面.  文檔中說如果需要使用Microsoft SQL Server,可以用Sybase介面或ODBC介面訪問. Unix下編譯時間,應該在Configure時指定要帶哪些資料庫支援,系統中應該有這些資料庫的客戶程式(至少是標頭檔和庫檔案). 各種資料庫,訪問函數並不完全相同,例如那些基於SQL的資料庫顯然不能用和dBase或dbm相同的方式訪問.以下比較詳細地介紹幾種資料庫的訪問函數:
   一.dBase
   (1)dbase_create(檔案名稱,域數組);
   域數組的每一項又是一個數組,內容為該域的名稱,類型,長度和精度(後兩項不一定要有).
   域類型是一個字元,有這麼幾種值:
   "L"--邏輯,"M"--備忘,"D"--日期,"N"--數字,"C"--字串返回一個資料庫描述符,失敗則返回false.
   (2)dbase_open(檔案名稱,開啟檔案);
   開啟檔案與C的open函數中的一樣.
   返回一個資料庫描述符,失敗則返回false.
   (3)dbase_numfields(資料庫描述符),dbase_numrecords(資料庫描述符);
   (4)dbase_add_record(資料庫描述符,記錄);
   記錄是一個數組.失敗則返回false.
   (5)dbase_get_record(資料庫描述符,記錄號);
   返回一個數組,下標從0開始.該數組如果用下標"deleted"訪問,可以得到 該記錄是否已被刪除的資訊.
   (6)dbase_delete_record(資料庫描述符,記錄號);
   (7)dbase_pack(資料庫描述符);
   (8)dbase_close(資料庫描述符);
  
    二,dbm
   dbm是Unix下的一種非關聯式資料庫(至少我感覺是這樣),它實際上是檔案形式的雜湊表,每一對名字/值項稱為一個記錄.
   dbm有好幾個版本,如ndbm,gdbm,等等.
   (1)dbmopen(檔案名稱,標誌);
   標誌是"r"(唯讀),"w"(可寫)或"n"(建立). 返回一個資料庫標識符.
   (2)dbmfirstkey(資料庫標識符);
   取得第一個名字(鍵),返回一個字串.
   (3)dbmnextkey(資料庫標識符,當前鍵);
   返回下一個鍵.
   (4)dbmexists(資料庫標識符,鍵);
   確認該鍵是否存在,返回true/false.
   (5)dbmfetch(資料庫標識符,鍵);
   返回該鍵對應的值(字串).
   (6)dbminsert(資料庫標識符,鍵,值);
   插入一個記錄,如指定鍵已存在則返回false,否則返回true.
   (7)dbmreplace(資料庫標識符,鍵,值);
   替換一個記錄,如原來沒有該記錄則插入.
   (8)dbmdelete(資料庫標識符,鍵);
   刪除一個記錄.
   (9)dbmclose(資料庫標識符);
  
     三,mSQL與MySQL.
   mSQL(mini SQL)是一種小型的關聯式資料庫,效能不是太好,對SQL語言的支援也不夠完全,但在一些網路資料庫應用中是足夠了. MySQL是mSQL的一個變種,效能有所提高,增加了使用者存取控制.  這兩種資料庫都是通過SQL語言訪問的,但MySQL基本支援全部SQL92規範,只是"select ... where select .."不支援,另外還擴充了一些資料類型,而mSQL 則基本上不支援任何嵌套SQL語句,也不支援"update set column1=column1-1"這 樣的語句.
   mSQL由於較簡單,在運行簡單的SQL語句時速度比MySQL略快,而MySQL在 線程和索引上下了功夫,運行複雜的SQL語句時比mSQL,PostgreSQL,Oracle等都要快一些. 安全性方面,mSQL通過ACL檔案設定各主機上各使用者的存取權限,預設是 全部可讀/寫,而MySQL通過一個授權庫設定使用者名稱,口令和存取權限,較可靠一些.
   mSQL的儲存能力不是很清楚,MySQL的儲存能力受檔案系統限制,例如在 Linux下不能超過2G(3G?記不清楚了).
   它們的好處就是都能免費得到並在Linux下安裝,不過如果用於商業用途 需要付費. PostgreSQL也是Linux下的免費資料庫,RedHat5裡面就帶了,不過我沒有用過,就不說了.
   mSQL與MySQL既然本來就是差不多的兩個東西,PHP中對它們的訪問語句也 都差不多,例如msql_close與mysql_close就分別完成同樣的關閉動作.所以以下介紹 時只對mysql介紹,msql的訪問語句只需換個首碼即可(特殊情況另行說明). 注意:mSQL與MySQL訪問函數都需要有相應的許可權才能運行.
   (1)mysql_connect(主機,使用者名稱,口令);
   返回一個串連號.
   注意:mysql各使用者的口令可以隨該使用者所在機器IP地址不同而改變. 另外,mSQL沒有使用者名稱機制,所以msql_connect只需要一個主機參數. 主機可以是IP地址或網域名稱.
   (2)mysql_create_db(資料庫名);
   (3)mysql_select_db(資料庫名,串連號);
   串連一個資料庫.
   (4)mysql_query(SQL語句,串連號);
   如果SQL語句是select,則返回一個結果號.否則返回的值可以不理會.   如果失敗,返回false.
   (5)mysql_fetch_array(結果號);
   取出下一行,返回一個數組.可以用數字下標訪問(第一個欄位是下標 0),也可以用字串下標訪問(即使用各欄位名).
   如已取了最後一行,返回false.
   (6)mysql_fetch_field(結果號,[欄位序號]);
   如無欄位序號,取下一個欄位. 返回一個雜湊表,下標有:
   name,table,max_length,not_null,primary_key,unique_key,
   multiple_key,numeric,blob,type,unsigned,zerofill
   各下標的意思應該比較明白了.
   (7)mysql_num_rows(結果號);mysql_num_fields(結果號);
   (8)mysql_free_result(結果號);
   (9)mysql_list_dbs();mysql_list_tables(資料庫名);
   (10)mysql_close(串連號);
   (11)mysql_pconnect(主機,使用者名稱,口令);
   與mysql_connect完全相似,但建立一個"永久串連",該串連一經建立永不關閉, 即使使用mysql_close函數或程式執行完畢也不關閉.下一次試圖建立永久串連時,系統 如發現已存在一個永久串連,則直接返回該串連號而不重新建立.
  



相關關鍵詞:
相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。