2012年5月20日 星期日

【PHP】基本陣列 (上)

一. 宣告


一個基本陣列 :$a = array( 0=>"a" , 1=>"b" , 2=>"c" , 3=>"d" ) ;


以下為陣列示意圖:




以下有幾種相同效果的宣告方法


方法1: 一個一個元素加上去。


$a = array();
$a[] = "a";
$a[] = "b";
$a[] = "c"
$a[] = "d"




方法2: 將元素全部排進去。


$a = array( "a", "b" , "c" , "d" ) ;




方法3: 指定一個初始的鍵值0,將元素全部排進去,陣列會自動編排第一個鍵值0、第二個鍵值1,以此類推。


$a = array( 0 => "a", "b" , "c" , "d" ) ;


方法4: 本文第一行的方法,將每個元素都指定鍵值,一個一個排下去。


$a = array( 0=>"a" , 1=>"b" , 2=>"c" , 3=>"d" ) ;





二.印出


一般來說,陣列印出都使用迴圈,當然還有特殊方法


$a = array( 0=>"a" , 1=>"b" , 2=>"c" , 3=>"d" ) ;

印出上面內容有下面幾個方法


方法1: 使用for迴圈


for$i = 0 ;  $i<count($a) ; $i++ )
{
print $a[$i]
}
//結果:abcd


方法2: 使用while


while( $i<count($a) )
{
print $a[$i++];
}
//結果:abcd


方法3: 用 implode( 每個元素中間要用什麼區隔 , 陣列 ) ,
                先將陣列合併成一個字串,在印出。此方法比較有效率。


print implode( "" , $a ) ;  //印出陣列元素,每個元素中間用 "," (逗號) 隔開。
//結果:a,b,c,d



方法4: foreach( 陣列 as 鍵值 => 數值 ) 印出陣列鍵值與元素。


foreach( $a as $key => $value )
print $key "," $value ."、" ;
//結果:0,a、1,b  2,c  3,d



foreach( $a as $value )
print  $value  ;
//結果:abcd




撰寫:zap
參考:Dreamweaver CS3 + PHP 網頁資料庫範例教學(文魁)

【SQL】多個資料表的SELECT搜尋


( 上為一個模擬的關聯資料表 )


如果只要顯示以下3個欄位

order.name food.name  還有  drink.name





整體語法:

SELECT 欄位
FROM 資料表1  INNER JOIN  資料表2  ON 資料表1的欄位 = 資料表2的欄位



INNER JOIN→連接2個資料表
ON→連接2個欄位




分析一下大原則:



SELECT 欄位1,欄位2,...
FROM 飲料資料表  INNER JOIN( 點餐資料表 INNER JOIN 食物資料表 ON 點餐資料表欄位 = 食物資料表欄位 ) ON 飲料資料表欄位 = 點餐資料表欄位



  1. 先連結 點餐資料表食物資料表
  2. 再連結 點餐資料表欄位食物資料表欄位
  3. 飲料資料表 再與 點餐資料表 連接
  4. 再連接 飲料資料表欄位點餐資料表欄位


SQL搜尋語法如下:


SELECT order.name , food.name , drink.name
FROM drink INNER JOIN
(order INNER JOIN food ON order.foodid = food.foodid ) 
ON drink.drinkid = order.drinkid




總結:


  1. 資料表連結誰先誰後都無所謂,但是一定要符合關聯資料表的原則
  2. 多個資料表連結,必須先連結其中2個,剩下的再逐一連結




撰寫:zap
參考:SQL SERVER 2008R2 資料庫設計實務(碁峯)

【PHP】mysql_connect 與 mysql_pconnect

在php裡面
要與mysql建立連線的兩個函式 
mysql_connect  與  mysql_pconnect
兩個有什麼差別呢?
mysql_connect很簡單
就是用完就丟
也不需要使用mysql_close()
因為它使用完畢就會自動關閉連線
只是每次建立時比較耗一些資源


mysql_pconnect
則是建立一個持續的連線
它會保留給下次連線使用
而且不能用mysql_close()來關閉
如果今天只對一個資料庫作存取
只需要注意mysql最大連線數即可
如果今天是要對兩個或多個資料庫作存取
要非常注意
假設今天連線數上限是300
當連線到a資料庫時有250
如果接下來有許多使用者要連線到b資料庫時
那還剩多少連線可以使用呢?
答案是50
因為已經分給a資料庫的連線
是不能關閉或是轉換給b資料庫的


所以使用mysql_pconnect
是不是完全好的?
我覺得要考慮許多的情況才行


依照你網站的需求
再去決定要使用哪種連線方式




文:葉小誠

【PHP】防止SQL注入攻擊 (mysql_real_escape_string)

mysql_real_escape_string()會自動在特殊字元前面加上\
例如: $a =what's what\'s
這樣一來就可以防止SQL攻擊。

例如有段程式碼如下:
$sql="SELECT * FROM test WHERE id = ' ".$id." '  pass= ' ".$passwd." ' ";

如果有人在pass裡面輸入 ' or '1'='1
那這樣不就會變 


$sql="SELECT * FROM test WHERE id =  ' test '    pass= '   ' or '1'='1  ' ";




$sql="SELECT * FROM test WHERE id =  test '    pass= '   ' or '1' '1' ";




所以我們把程式碼改成


$sql="SELECT * FROM test WHERE id =


' ".mysql_real_escape_string($id)." '


pass= ' ".mysql_real_escape_string($passwd)."";


這樣就不怕有心人了