串連到MySQL:
mysql_connect():
$dbc=mysql_connect($host,$user,$password);
選擇當前資料庫:
mysql_select_db($database_name);
mysql_select_db('$database_name',$conn);
eg:
如果函數不能返回有效資源連結,則會執行 or die(), die()函數會終止指令碼的執行。
執行簡單的查詢:
$result=mysql_query($query);
對於像insert、update、delete等簡單的查詢,它們不會返回記錄,$result變數將會返回true或false,這取決於查詢是否執行成功。對於確實會返回記錄的複雜查詢(select、show、describe和explain),如果查詢有效,則$result變數將是一個指向查詢結果的資源連結;如果查詢無效,則$result變數將為false。
1 2 Thank you!';52 }53 else54 {55 echo 'System error'.mysql_error();56 }57 }58 else59 {60 echo 'Error!
';61 foreach($errors as $msg)62 {63 echo "-$msg
\n";64 }65 echo 'Please try again!';66 }67 ?>68
關閉現有的MySQL連結:
mysql_close(); //php會在指令碼的末尾自動關閉串連,所以這不是必須的。
檢索查詢結果
格式:
mysql_fetch_row(result);
說明:mysql_fetch_row用來查詢結果的一行儲存至數組,該數組下標從0開始,每一個數組元素對應
一個域。通過迴圈,可以將查詢結果全部獲得。
格式:
1 mysql_fetch_array(result);
說明:mysql_fetch_array和mysql_fetch_row功能基本相同,只不過它除了可以用從0開始的位移量作
索引,還可以用網域名稱作索引。
值返回下一行的所有域值,並將其儲存至一個數組中,沒有行時返回false。
mysql_query("set name 'GBK'")
//使用GBK中文編碼
處理select查詢結果的主要工具是mysql_fetch_array(),它帶有一個查詢結果變數($result),並以數組格式一次返回一行資料。
從查詢讀取每條記錄:
while($row=mysql_fetch_array($result)) { ......... }
mysql_fetch_array()函數還帶有一個可選項,用於指定返回的數組的類型:聯合數組、索引數組,或則兩者。聯合數組允許通過名稱引用列值,而索引數組則要求只使用數字,他們如下表:
| 常量 |
樣本 |
| MYSQL_ASSOC |
$row['column'] |
| MYSQL_NUM |
$row[0] (速度稍快) |
| MYSQL_BOTH |
$row[0]或$row['column'] (預設) |
釋放查詢資訊:
mysql_free_result($result);
這一步不是必需的,因為PHP將在指令碼末尾自動釋放資源。
eg:
1 8 NAMEid'; 9 10 while($row=mysql_fetch_array($result,MYSQL_ASSOC))11 {12 echo ''.$row['name'].''.$row['id'].'';13 }14 echo '';15 mysql_free_result($result);16 }17 18 else19 {20 echo 'The current users could not be retrieved.We apologize for any inconvenience
';21 echo mysql_error();22 }23 mysql_close();24 25 ?>
運行結果為:
技巧總結
mysql_fetch_array()函數與mysql_fetch($result,MYSQL_NUM)函數等價
mysql_fetch_assoc()函數與mysql_fetch_array($result,MYSQL_ASSOC)函數等價
必需使用mysql_query()執行查詢,然後使用mysql_fetch_array()來檢索單行資訊,如果要檢索多行,則可使用while迴圈(而不要使用for或foreach迴圈)。
確保SQL安全
關於PHP的資料庫安全可歸納為兩大類問題:
1.保護資料庫訪問資訊
2.在執行查詢時要小心。
使用特定的
mysql_real_escape_string()
函數,轉義那些有可能有問題的字元來清理資料:
$data=mysql_real_escape_string($data,$dbc);
這個函數與addslashes()一樣。它更特定於資料庫。
使用ini_get()函數測試Magic Quotes狀態,這個函數將為特定的選項返回PHP的設定檔中的配置。如果ini_get() 函數返回true,就說明開啟了Magic Quotes??則將在應用mysql_real_escape_string()之前,去除所有的斜杠。
在pHP的目前的版本中,Magic Quotes預設是關閉的,因此ini_get()將返回FALSE,並且不需要去除任何現有的斜杠。
如果Magic Quotes是開啟的情況下,它會自動在需要轉義的字元前加上“\”,而我們向資料庫中寫入的時候這往往會引起錯誤,所以需要使用stripslashes($string)把那些\去掉。然後再調用mysql_real_escape_string()函數。
eg:
1 function escape_data($data)2 {3 global $dbc;4 if(ini_get('magic_quotes_gpc'))5 {6 $data=stripslashes($data);7 }8 retrun mysql_real_escape_string(trim($data),$dbc);9 }
技巧總結
mysql_real_escape_String()函數一招所用的語言對字串進行轉義
mysql_real_escape_string()函數需要一個資料庫連接。
get_magic_quotes_gpc()函數也可用於返回當前的Magic Quotes設定。
ini_get()可用於擷取許多不同的php.ini設定的內容,不只是Magic Quotes的設定。
統計返回的記錄
mysql_num_rows(),返回select查詢索引的行數,並取查詢的結果作為一個參數。
eg:
$num=mysql_num_rows($result);
其他常用Mysql函數介紹
mysql_insert_id
傳回最後一次使用 INSERT 指令的 ID。
mysql_tablename
取得資料庫名稱