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! 插入紀錄功能完成!