国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號(hào)

PHP 和 MYSQL 開發(fā)的 8 個(gè)技巧
2007-01-26   WWW.FREELAMP.COM

LAMP 架構(gòu)的網(wǎng)站,我以前注重的多是安裝/配置方面的,講述開發(fā)的相對(duì)較少,因?yàn)樽约簭氖麻_發(fā)也少。本文的原文當(dāng)然也來自:

PUBLISHED ON THE O'REILLY NETWORK (HTTP://WWW.OREILLYNET.COM/)
HTTP://WWW.OREILLYNET.COM/PUB/A/ONLAMP/2002/04/04/WEBDB.HTML

看了以后,頗有啟發(fā),以前開發(fā)中遇到的一些問題,迎刃而解。所以翻譯出來和大家共享。


1. PHP 中數(shù)組的使用
在操作數(shù)據(jù)庫時(shí),使用關(guān)聯(lián)數(shù)組(ASSOCIATIVELY-INDEXED ARRAYS)十分有幫助,下面我們看一個(gè)基本的數(shù)字格式的數(shù)組遍歷:

<PHP
$TEMP[0] = "RICHMOND";
$TEMP[1] = "TIGERS";
$TEMP[2] = "PREMIERS";

FOR($X=0;$X<COUNT($TEMP);$X++)
{
ECHO $TEMP[$X];
ECHO " ";
}
>

然而另外一種更加節(jié)省代碼的方式是:

<PHP
$TEMP = ARRAY("RICHMOND", "TIGERS", "PREMIERS");
FOREACH ($TEMP AS $ELEMENT)
ECHO "$ELEMENT ";
>

FOREACH 還能輸出文字下標(biāo):

<PHP
$TEMP = ARRAY("CLUB" => "RICHMOND",
"NICKNAME" =>"TIGERS",
"AIM" => "PREMIERS");

FOREACH ($TEMP AS $KEY => $VALUE)
ECHO "$KEY : $VALUE ";
>
PHP 手冊(cè)中描述了大約 50 個(gè)用于處理數(shù)組的函數(shù)。

2. 在 PHP 字符串中加入變量

這個(gè)很簡(jiǎn)單的:

<PHP
$TEMP = "HELLO"
ECHO "$TEMP WORLD";
>

但是需要說明的是,盡管下面的例子沒有錯(cuò)誤:
<PHP
$TEMP = ARRAY("ONE" => 1, "TWO" => 2);
// 輸出:: THE FIRST ELEMENT IS 1
ECHO "THE FIRST ELEMENT IS $TEMP[ONE].";
>

但是如果后面那個(gè) ECHO 語句沒有雙引號(hào)引起來的話,就要報(bào)錯(cuò),因此建議使用花括號(hào):

<PHP
$TEMP = ARRAY("ONE" => 1, "TWO" => 2);
ECHO "THE FIRST ELEMENT IS {$TEMP["ONE"]}.";
>


3. 采用關(guān)聯(lián)數(shù)組存取查詢結(jié)果
看下面的例子:

<PHP
$CONNECTION = MYSQL_CONNECT("LOCALHOST", "ALBERT", "SHHH");
MYSQL_SELECT_DB("WINESTORE", $CONNECTION);

$RESULT = MYSQL_QUERY("SELECT CUST_ID, SURNAME,
FIRSTNAME FROM CUSTOMER", $CONNECTION);

WHILE ($ROW = MYSQL_FETCH_ARRAY($RESULT))
{
ECHO "ID: {$ROW["CUST_ID"]} ";
ECHO "SURNAME {$ROW["SURNAME"]} ";
ECHO "FIRST NAME: {$ROW["FIRSTNAME"]} ";
}
>

函數(shù) MYSQL_FETCH_ARRAY() 把查詢結(jié)果的一行放入數(shù)組,可以同時(shí)用兩種方式引用,例如 CUST_ID 可以同時(shí)用下面兩種方式:$ROW["CUST_ID"] 或者$ROW[0] 。顯然,前者的可讀性要比后者好多了。

在多表連查中,如果兩個(gè)列名字一樣,最好用別名分開:

SELECT WINERY.NAME AS WNAME,
REGION.NAME AS RNAME,
FROM WINERY, REGION
WHERE WINERY.REGION_ID = REGION.REGION_ID;


列名的引用為:$ROW["WNAME"] 和 $ROW["RNAME"]。


在指定表名和列名的情況下,只引用列名:

SELECT WINERY.REGION_ID
FROM WINERY

列名的引用為: $ROW["REGION_ID"]。

聚集函數(shù)的引用就是引用名:

SELECT COUNT(*)
FROM CUSTOMER;

列名的引用為: $ROW["COUNT(*)"]。

4. 注意常見的 PHP BUG

常見的 PHP 糾錯(cuò)問題是:

NO PAGE RENDERED BY THE WEB BROWSER WHEN MUCH MORE IS EXPECTED
A POP-UP DIALOG STATING THAT THE "DOCUMENT CONTAINS NO DATA"
A PARTIAL PAGE WHEN MORE IS EXPECTED

出現(xiàn)這些情況的大多數(shù)原因并不在于腳本的邏輯,而是 HTML 中存在的 BUG 或者腳本生成的 HTML 的 BUG 。例如缺少類似 </TABLE>, </FORM>, </FRAME> 之類的關(guān)閉 TAG,頁面就不能刷新。解決這個(gè)問題的辦法就是,查看 HTML 的源代碼。

對(duì)于復(fù)雜的,不能查到原因的頁面,可以通過 W3C 的頁面校驗(yàn)程序 HTTP://VALIDATOR.W3.ORG/ 來分析。

如果沒有定義變量,或者變量定義錯(cuò)誤也會(huì)讓程序變得古怪。例如下面的死循環(huán):

<PHP
FOR($COUNTER=0; $COUNTER<10; $COUNTER++)
MYFUNCTION();
>

變量 $COUNTER 在增加,而 $COUNTER 永遠(yuǎn)小于 10。這類錯(cuò)誤一般都能通過設(shè)置較高的錯(cuò)誤報(bào)告級(jí)別來找到:

<PHP
ERROR_REPORTING(E_ALL);

FOR($COUNTER=0; $COUNTER<10; $COUNTER++)
MYFUNCTION();
>

5. 采用 HEADER() 函數(shù)處理單部件查詢

在很多 WEB 數(shù)據(jù)庫應(yīng)用中,一些功能往往讓用戶點(diǎn)擊一個(gè)連接后,繼續(xù)停留在當(dāng)前頁面,這樣的工作我叫它“單部件查詢”。

下面是一個(gè)叫做 CALLING.PHP 的腳本:

<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"
"HTTP://WWW.W3.ORG/TR/HTML4/LOOSE.DTD" >
<HTML>
<HEAD>
<TITLE>CALLING PAGE EXAMPLE</TITLE>
</HEAD>
<BODY>
<A HREF="ACTION.PHP">CLICK HERE!</A>
</BODY>
</HTML>

當(dāng)用戶點(diǎn)擊上面的連接時(shí),就去調(diào)用 ACTION.PHP。下面是 ACTION.PHP 的源碼:

<PHP
// 數(shù)據(jù)庫功能

// 重定向
HEADER("LOCATION: $HTTP_REFERER");
EXIT;
>

這里有兩個(gè)常見的錯(cuò)誤需要提醒一下:
調(diào)用 HEADER() 函數(shù)后要包含一個(gè) EXIT 語句讓腳本停止,否則后續(xù)的腳本可能會(huì)在頭發(fā)送前輸出。


HEADER() 函數(shù)常見的一個(gè)錯(cuò)誤是:

WARNING: CANNOT ADD HEADER INFORMATION - HEADERS ALREADY SENT...

HEADER() 函數(shù)只能在 HTML 輸出之前被調(diào)用,因此你需要檢查 PHP 前面可能存在的空行,空格等等。

6. RELOAD 的問題及其解決
我以前在寫 PHP 程序時(shí),經(jīng)常碰到頁面刷新時(shí),數(shù)據(jù)庫多處理一次的情況。
我們來看 ADDCUST.PHP:

<PHP
$QUERY = "INSERT INTO CUSTOMER
SET SURNAME = $SURNAME,
FIRSTNAME = $FIRSTNAME";
$CONNECTION = MYSQL_CONNECT("LOCALHOST", "FRED", "SHHH");
MYSQL_SELECT_DB("WINESTORE", $CONNECTION);
$RESULT = MYSQL_QUERY($QUERY, $CONNECTION);
>
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"
"HTTP://WWW.W3.ORG/TR/HTML4/LOOSE.DTD" >
<HTML>
<HEAD>
<TITLE>CUSTOMER INSERT</TITLE>
</HEAD>
<BODY>
I'VE INSERTED THE CUSTOMER FOR YOU.
</BODY>
</HTML>
>
假設(shè)我們用下面的連接使用這個(gè)程序:

HTTP://WWW.FREELAMP.COM/ADDCUST.PHPSURNAME=SMITH&FIRSTNAME=FRED

如果這個(gè)請(qǐng)求只提交一次,OK ,不會(huì)有問題,但是如果多次刷新,你就會(huì)有多條記錄插入。
這個(gè)問題可以通過 HEADER() 函數(shù)解決:下面是新版本的 ADDCUST.PHP:

<PHP
$QUERY = "INSERT INTO CUSTOMER
SET SURNAME = $SURNAME,
FIRSTNAME = $FIRSTNAME";
$CONNECTION = MYSQL_CONNECT("LOCALHOST", "FRED", "SHHH");
MYSQL_SELECT_DB("WINESTORE", $CONNECTION);
$RESULT = MYSQL_QUERY($QUERY, $CONNECTION);
HEADER("LOCATION: CUST_RECEIPT.PHP");
>
這個(gè)腳本把瀏覽器重定向到一個(gè)新的頁面:CUST_RECEIPT.PHP:

<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"
"HTTP://WWW.W3.ORG/TR/HTML4/LOOSE.DTD" >
<HTML>
<HEAD>
<TITLE>CUSTOMER INSERT</TITLE>
</HEAD>
<BODY>
I'VE INSERTED THE CUSTOMER FOR YOU.
</BODY>
</HTML>
這樣,原來的頁面繼續(xù)刷新也沒有副作用了。

7. 巧用鎖機(jī)制來提高應(yīng)用性能
如果我們要緊急運(yùn)行一個(gè)報(bào)表,那么,我們可以對(duì)表加寫鎖,防治別人讀寫,來提高對(duì)這個(gè)表的處理速度。

8. 用 MYSQL_UNBUFFERED_QUERY() 開發(fā)快速的腳本
這個(gè)函數(shù)能用來替換 MYSQL_QUERY() 函數(shù),主要的區(qū)別就是 MYSQL_UNBUFFERED_QUERY() 執(zhí)行完查詢后馬上返回,不需要等待或者對(duì)數(shù)據(jù)庫加鎖。

但是返回的行數(shù)不能用MYSQL_NUM_ROWS() 函數(shù)來檢查,因?yàn)檩敵龅慕Y(jié)果集大小未知。

熱詞搜索:

上一篇:ASP網(wǎng)站黑客防范編程技巧
下一篇:網(wǎng)絡(luò)硬盤存儲(chǔ)成風(fēng) 備份資料很重要

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲精品亚洲人成人网在线播放| 国产美女主播视频一区| 久久久久久久精| 不卡一区在线观看| 亚洲视频一区二区在线| 欧美三级日韩三级国产三级| 亚洲成年人影院| 日韩精品在线网站| 成人av网站在线| 亚洲一区二区三区四区在线| 6080日韩午夜伦伦午夜伦| 麻豆精品蜜桃视频网站| 久久精品亚洲麻豆av一区二区| 成人福利在线看| 性感美女极品91精品| 日韩免费性生活视频播放| 丰满放荡岳乱妇91ww| 一个色在线综合| 欧美成人video| 99riav一区二区三区| 天天亚洲美女在线视频| 久久久精品综合| 91看片淫黄大片一级在线观看| 视频在线观看一区| 国产人伦精品一区二区| 精品视频色一区| 高清日韩电视剧大全免费| 一区二区三区欧美| 欧美精品一区二区在线观看| 99精品视频一区二区三区| 免费人成黄页网站在线一区二区| 国产色一区二区| 91麻豆精品国产91久久久久久久久| 国产精品1区二区.| 日韩精彩视频在线观看| 国产精品短视频| 日韩欧美国产一区在线观看| 91网站在线观看视频| 精品无码三级在线观看视频| 亚洲狠狠丁香婷婷综合久久久| 精品国产一区二区国模嫣然| 91国在线观看| 成人av资源下载| 国产一区二区三区久久久 | 国产精品亚洲第一| 日韩中文字幕av电影| 国产精品不卡在线| 精品国产乱码久久久久久夜甘婷婷 | 大陆成人av片| 日韩成人精品在线观看| 亚洲人成7777| 欧美韩国日本综合| 精品国产91亚洲一区二区三区婷婷| 在线这里只有精品| 99re这里只有精品6| 国产成人在线色| 免费观看在线色综合| 亚洲成av人在线观看| 伊人一区二区三区| 国产精品二三区| 国产精品三级久久久久三级| 精品av久久707| 日韩一卡二卡三卡| 91精品国产一区二区三区蜜臀| 欧美在线观看视频一区二区三区 | 韩国视频一区二区| 蜜桃视频一区二区| 日韩av一区二区三区四区| 一区二区免费视频| 亚洲欧美aⅴ...| 中文字幕在线不卡一区 | 久久久国产精品午夜一区ai换脸| 欧美一区二区三区日韩| 91麻豆精品国产自产在线| 欧美久久一二区| 欧美日本在线视频| 欧美一区二区性放荡片| 欧美精品一卡两卡| 91精品黄色片免费大全| 欧美一区二区视频网站| 91精品国产一区二区三区香蕉| 欧美电影一区二区三区| 欧美丝袜自拍制服另类| 91精品国产品国语在线不卡| 日韩一区二区视频在线观看| 欧美一二三区在线观看| 欧美xingq一区二区| 久久精品夜夜夜夜久久| 国产精品女人毛片| 一区二区三区中文字幕| 亚洲综合激情另类小说区| 亚洲成va人在线观看| 六月丁香婷婷色狠狠久久| 免费成人美女在线观看| 久久99最新地址| 国产二区国产一区在线观看| 波多野结衣中文字幕一区二区三区| 99精品1区2区| 制服.丝袜.亚洲.中文.综合| 精品日韩在线一区| 日本一区二区三区电影| 亚洲精品高清在线| 久久精品99国产国产精| yourporn久久国产精品| 欧美亚洲精品一区| 久久综合久久鬼色中文字| 国产精品人成在线观看免费| 一区二区三区在线视频播放| 五月激情综合色| 国产麻豆日韩欧美久久| 色狠狠色噜噜噜综合网| 日韩一区二区三区免费观看| 日本一区二区在线不卡| 亚洲高清在线精品| 国产精品亚洲一区二区三区在线| 99re这里只有精品视频首页| 日韩精品一区二区三区蜜臀| 国产精品视频看| 日韩成人伦理电影在线观看| 成人性生交大合| 7777精品久久久大香线蕉 | 一区二区久久久| 精品午夜一区二区三区在线观看| 色综合久久中文字幕综合网| 日韩欧美另类在线| 一区二区三区久久| 懂色av一区二区三区免费看| 欧美日韩在线亚洲一区蜜芽| 欧美国产日韩a欧美在线观看 | 国产一区二三区| 欧美伊人久久久久久午夜久久久久| 欧美mv日韩mv国产网站app| 亚洲女人小视频在线观看| 精品一区二区三区在线播放| 欧美日韩精品三区| 国产精品美女久久久久aⅴ| 蜜乳av一区二区三区| 91福利精品视频| 国产精品久久久久久久久快鸭| 免费观看成人av| 欧美日韩亚洲综合| 亚洲丝袜制服诱惑| 国产精品一卡二卡| 精品久久久久99| 日日夜夜一区二区| 在线视频你懂得一区| 国产精品久久久久久户外露出 | 国产美女视频一区| 91精品国产一区二区| 久久99国产精品久久99| 色菇凉天天综合网| 中文字幕欧美国产| 国产福利精品导航| 久久蜜桃香蕉精品一区二区三区| 日韩成人免费看| 欧美日韩国产免费| 亚洲综合偷拍欧美一区色| caoporn国产一区二区| 久久青草国产手机看片福利盒子| 男男成人高潮片免费网站| 欧美日韩在线播放| 亚洲第一狼人社区| 色哟哟一区二区三区| 国产精品国产三级国产三级人妇 | 亚洲丰满少妇videoshd| 在线观看www91| 亚洲自拍偷拍网站| 欧美天天综合网| 石原莉奈在线亚洲二区| 91精品视频网| 午夜成人免费视频| 91精品国产91综合久久蜜臀| 日韩国产在线一| 欧美一区中文字幕| 激情综合亚洲精品| 精品国产电影一区二区| 国产成人8x视频一区二区| 欧美激情一区二区三区不卡 | 开心九九激情九九欧美日韩精美视频电影 | 久久精品视频免费| 国产毛片精品视频| 亚洲视频在线一区| 在线免费一区三区| 日本成人超碰在线观看| 26uuu精品一区二区在线观看| 国产又黄又大久久| 一区二区中文视频| 色妹子一区二区| 日韩精品一卡二卡三卡四卡无卡| 日韩一区二区三区免费观看| 国产麻豆精品一区二区| 专区另类欧美日韩| 欧美日韩免费高清一区色橹橹| 日本不卡一二三区黄网| 久久久久久影视| 色综合天天综合在线视频| 亚洲电影视频在线| 国产精品欧美久久久久无广告 | 精品一区二区三区免费播放|