您好,登錄后才能下訂單哦!
這篇文章主要介紹“PHP和MySQL有哪些開發技巧”,在日常操作中,相信很多人在PHP和MySQL有哪些開發技巧問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP和MySQL有哪些開發技巧”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
PHP和MySQL開發有哪些技巧
1.PHP中數組的使用
在操作數據庫時,使用關聯數組(associatively-indexedarrays)十分有幫助,下面我們看一個基本的數字格式的數組遍歷:
$temp[0]="richmond";
$temp[1]="tigers";
$temp[2]="premiers";
for($x=0;$x
{
echo$temp[$x];
echo"";
}
?>
然而另外一種更加節省代碼的方式是:
$temp=array("richmond","tigers","premiers");
foreach($tempas$element)
echo"$element";
?>
foreach還能輸出文字下標:
$temp=array("club"=>"richmond",
"nickname"=>"tigers",
"aim"=>"premiers");
foreach($tempas$key=>$value)
echo"$key:$value";
?>
PHP手冊中描述了大約50個用于處理數組的函數。
2.在PHP字符串中加入變量
這個很簡單的:
$temp="hello"
echo"$tempworld";
?>
但是需要說明的是,盡管下面的例子沒有錯誤:
$temp=array("one"=>1,"two"=>2);
//輸出::Thefirstelementis1
echo"Thefirstelementis$temp[one].";
?>
但是如果后面那個echo語句沒有雙引號引起來的話,就要報錯,因此建議使用花括號:
$temp=array("one"=>1,"two"=>2);
echo"Thefirstelementis{$temp["one"]}.";
?>
3.采用關聯數組存取查詢結果
看下面的例子:
$connection=mysql_connect("localhost","albert","shhh");
mysql_select_db("winestore",$connection);
$result=mysql_query("SELECTcust_id,surname,
firstnameFROMcustomer",$connection);
while($row=mysql_fetch_array($result))
{
echo"ID:\t{$row["cust_id"]}\n";
echo"Surname\t{$row["surname"]}\n";
echo"Firstname:\t{$row["firstname"]}\n\n";
}
?>
函數mysql_fetch_array()把查詢結果的一行放入數組,可以同時用兩種方式引用,例如cust_id可以同時用下面兩種方式:$row["cust_id"]或者$row[0]。顯然,前者的可讀性要比后者好多了。
在多表連查中,如果兩個列名字一樣,最好用別名分開:
SELECTwinery.nameASwname,
region.nameASrname,
FROMwinery,region
WHEREwinery.region_id=region.region_id;
列名的引用為:$row["wname"]和$row["rname"]。
在指定表名和列名的情況下,只引用列名:
SELECTwinery.region_id
FROMwinery
列名的引用為:$row["region_id"]。
聚集函數的引用就是引用名:
SELECTcount(*)
FROMcustomer;
列名的引用為:$row["count(*)"]。
4.注意常見的PHPbug
常見的PHP糾錯問題是:
NopagerenderedbytheWebbrowserwhenmuchmoreisexpected
Apop-updialogstatingthatthe"DocumentContainsNoData"
Apartialpagewhenmoreisexpected
出現這些情況的大多數原因并不在于腳本的邏輯,而是HTML中存在的bug或者腳本生成的HTML的bug。例如缺少類似,,之類的關閉Tag,頁面就不能刷新。解決這個問題的辦法就是,查看HTML的源代碼。
對于復雜的,不能查到原因的頁面,可以通過W3C的頁面校驗程序http://validator.w3.org/來分析。
如果沒有定義變量,或者變量定義錯誤也會讓程序變得古怪。例如下面的死循環:
for($counter=0;$counter<10;$counter++)>
變量$Counter在增加,而$counter永遠小于10。這類錯誤一般都能通過設置較高的錯誤報告級別來找到:
error_reporting(E_ALL);
for($counter=0;$counter<10;$counter++)>
PHP和MySQL開發有哪些技巧
5.采用header()函數處理單部件查詢
在很多Web數據庫應用中,一些功能往往讓用戶點擊一個連接后,繼續停留在當前頁面,這樣的工作我叫它“單部件查詢”。
下面是一個叫做calling.php的腳本:
"-//W3C//DTDHTML4.0Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Clickhere!
當用戶點擊上面的連接時,就去調用action.php。下面是action.php的源碼:
//數據庫功能
//重定向
header("Location:$HTTP_REFERER");
exit;
?>
這里有兩個常見的錯誤需要提醒一下:
調用header()函數后要包含一個exit語句讓腳本停止,否則后續的腳本可能會在頭發送前輸出。
header()函數常見的一個錯誤是:
Warning:Cannotaddheaderinformation-headersalreadysent...
header()函數只能在HTML輸出之前被調用,因此你需要檢查php前面可能存在的空行,空格等等。
6.reload的問題及其解決
我以前在寫PHP程序時,經常碰到頁面刷新時,數據庫多處理一次的情況。
我們來看addcust.php:
$query="INSERTINTOcustomer
SETsurname=$surname,
firstname=$firstname";
$connection=mysql_connect("localhost","fred","shhh");
mysql_select_db("winestore",$connection);
$result=mysql_query($query,$connection);
?>
"-//W3C//DTDHTML4.0Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
I'veinsertedthecustomerforyou.
?>
假設我們用下面的連接使用這個程序:
http://www.freelamp.com/addcust.php?surname=Smith&firstname=Fred
如果這個請求只提交一次,OK,不會有問題,但是如果多次刷新,你就會有多條記錄插入。
這個問題可以通過header()函數解決:下面是新版本的addcust.php:
$query="INSERTINTOcustomer
SETsurname=$surname,
firstname=$firstname";
$connection=mysql_connect("localhost","fred","shhh");
mysql_select_db("winestore",$connection);
$result=mysql_query($query,$connection);
header("Location:cust_receipt.php");
?>
這個腳本把瀏覽器重定向到一個新的頁面:cust_receipt.php:
"-//W3C//DTDHTML4.0Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
I'veinsertedthecustomerforyou.
這樣,原來的頁面繼續刷新也沒有副作用了。
7.巧用鎖機制來提高應用性能
如果我們要緊急運行一個報表,那么,我們可以對表加寫鎖,防治別人讀寫,來提高對這個表的處理速度。
8.用mysql_unbuffered_query()開發快速的腳本
這個函數能用來替換mysql_query()函數,主要的區別就是mysql_unbuffered_query()執行完查詢后馬上返回,不需要等待或者對數據庫加鎖。
但是返回的行數不能用mysql_num_rows()函數來檢查,因為輸出的結果集大小未知。
到此,關于“PHP和MySQL有哪些開發技巧”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。