PHP與MySQL交互使用詳解
1、創建自動連接數據庫的代碼,並生成一些必要的代碼.我們仔細研究一下數據庫的連接函數,會發現是這樣的一行代碼。
$link_id=@mysql_connect($hostname,$username,$password);
所以我們在include文件connect.inc中添加以下代碼就可以瞭。connect.inc<?php$hostname=localhost;
$username=phpstar;$password=phpstar;$dbname=script;
$tablename=php_script;$link_id=mysql_connect($hostname,$username,$password);
if (! $link_id){ echo <html><head><title>Error</title></head><body>;
echo Connection to PHP has failed.;echo </body></html>;exit(); }?>
把這個程序加入到每個PHP腳本中,這樣當腳本運行時就建立瞭數據庫連接。因為我們的程序具有交互性,我們要處理用戶輸入的信息,所以在該文件中還應該加入以下代碼.
<?php//接著上面的代碼//加入一個處理輸入信息的代碼,並生成一個數組備用$arr_request=array();/*定義數組*/
if (count($HTTP_GET_VARS)) /*如果用戶信息以GET方式輸入,則讀數據*/
{ while (list($key, $value) = each ($HTTP_GET_VARS)) /*函數list()與each()配合處理輸入數據*/
{ $arr_request[strtolower($key)] = $value; } }
/*函數strtolower()將起區分作用的key字串轉為小寫,這樣對後面的編程有好處,並把他們組成數組*/
if (count($HTTP_POST_VARS)) /*用戶信息以POST方式輸入*/
{ while (list($key, $value) = each ($HTTP_POST_VARS))
{ $arr_request[strtolower($key)] = $value; } } //我們還要定義每次輸出的HTML
function html_header($title){ echo <html><head><title>;echo "$title";
echo </title></head><body bgcolor="#CCCCCC">; }function html_footer()
{ global $link_id;@mysql_close($link_id);echo </body></html>;}//還有一個出錯信息處理
function html_error_exit($msg){ $errno = mysql_errno(); /*得到錯誤信息代碼*/
$error = mysql_error(); /*得到錯誤信息,兩者一起起排錯作用*/
echo <html><head><title>Error</title></head><body>;echo $msg;
echo "<br>Error: ($errno) $error<br>";echo </body></html>;exit(); }?>
好瞭!我們把一些常用的代碼放在瞭這裡,用起來就方便瞭2、 創建數據庫表這有兩種方法:在DOS環境下輸入命令,但容易出錯哦.
利用程序,就算出錯,修改起來也容易.我們用程序來創建數據表.因為我們的程序要有普遍性,所以表中的字段並不重要,這裡我們隻是簡單的創建一個.該表具有以下管理字段:
key_script 這是一個有自動增量的字段,它保證表中的紀錄都是獨一無二的.date_created 這是一個日期字段,儲存該紀錄創建的時間
data_updated 這也是日期字段,儲存該紀錄最後一次更新的時間
flag_deleted 儲存該紀錄是否被刪除,"Y":該紀錄已被刪除,"N":該紀錄沒刪除,可使用具有以下儲存信息的字段.script_name 程序名稱
script_size 程序字節數script_describe 程序的簡單說明author_name 程序作者名author_email 程序作者的email
author_homepage 程序作者的主頁下面建立該程序:createTable.php<?phprequire(connect.inc);
$str_sql="create table php_script(
key_script int(10) unsigned DEFAULT 0 NOT NULL auto_increment,
date_created datetime DEFAULT 0000-00-00 00:00:00,
date_updated datetime DEFAULT 0000-00-00 00:00:00,
flag_deleted enum(Y,N) DEFAULT N NOT NULL,
script_name VARCHAR(20) NOT NULL,script_size VARCHAR(10) NOT NULL,
script_describe VARCHAR(200) NOT NULL,author_name VARCHAR(20) NOT NULL,
author_email VARCHAR(20) NOT NULL,author_homepage VARCHAR(30) NOT NULL,
primary key (key_script))";$result=mysql_db_query($dbname,$str_sql,$link_id);
if ($result){echo"ok! Table $tablename has been created!";}else{echo"Failed!";}
?>OK! 我們的表建好瞭!3、生成插入紀錄代碼程序。似乎我們應該先把紀錄顯示出來,然後才插入紀錄,但因為我們還沒有紀錄,所以把這一步提到前面來。
首先、創建一個HTML表單,以便用戶輸入相關信息。其次、創建能插入表單信息的MySQL代碼。好! 我們開始,表單樣式如下:程序名:文件大小:程序描述:作者名:
作者郵件地址:作者的主頁:能插入表單信息的MySQL代碼如下:script_insert_action.php<?php
require(connect.inc);if($arr_request[action]==insert){
$current_date=date(Y-m-d H:i:s);/*把當前時間按YYYY-MM-DD HH:MM:SS方式排列*/
/*下面要動態生成SQL代碼,其中我們定義的自動增量的字段由MySQL自己產生*/
/*另外flag_deleted字段的卻省值是"N",所以這兩項都不需要我們在這裡特別提出來*/
/*大傢都知道:PHP嚴格區分單引號()、雙引號(")的作用。而我們的作者名等在數組內*/
/*我們要這樣引用數組:$arr_request[author_name],註意這裡有單引號()*/
/*而我們在輸入insert語句的值時應該這樣:VALUES($current_date) */
/*如果我們不去處理這些分號,就會出現這種情況:VALUES($arr_request[author_name]) */
/*這種情況PHP能處理好嗎?當然不能,所以我們的想方法來處理它*//*這裡,我們用下面這種技術來避免這個問題;當然這裡還有其它的方法。您先想想吧!*/
$script_name=$arr_request[script_name];
$script_size=$arr_request[script_size];
$script_describe=$arr_request[script_describe];
$author_name=$arr_request[author_name];
$author_email=$arr_request[author_email];
$author_homepage=$arr_request[author_homepage];/*這樣一替換,處理時就好多瞭*/
$str_sql="insert into $tablename(date_created,date_updated,script_name,
script_size,script_describe,author_name,author_email,author_homepage)VALUES(
$current_date,$current_date,$script_name,$script_size,
$script_describe,$author_name,$author_email,$author_homepage)";
$result=mysql_db_query($dbname,$str_sql,$link_id);/* 下面給用戶簡單的信息反饋 */
if (!$result){html_error_exit(MySQL插入命令失敗!);}else(html_header(成功);
echo"<center> ";echo(MySQL插入命令成功);echo"<br> ";echo"html_footer();)?>
OK! 插入紀錄功能完成!