文章簡(jiǎn)單的介紹了從數(shù)據(jù)庫(kù)連接到把用戶提交的數(shù)據(jù)保存到mysql數(shù)據(jù)庫(kù)的整個(gè)過(guò)程,一一講解了操作方法,有需要的朋友看看下面五步.
1. 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接
2. 發(fā)送一些不是必須的語(yǔ)句
3. 選擇一個(gè)存儲(chǔ)的數(shù)據(jù)庫(kù)
4. 編寫數(shù)據(jù)庫(kù)插入語(yǔ)句
5. 發(fā)送這個(gè)語(yǔ)句
先看數(shù)據(jù)結(jié)構(gòu),代碼如下:
- --
- -- 表的結(jié)構(gòu) `guest`
- --
- CREATE TABLE IF NOT EXISTS `guest` (
- `id` int(11) NOT NULL auto_increment COMMENT '客戶自增id',
- `name` varchar(16) NOT NULL COMMENT '客戶名稱',
- `email` varchar(60) default NULL COMMENT '電子信箱',
- `qq` varchar(11) default NULL COMMENT 'QQ號(hào)碼',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
- --
- -- 導(dǎo)出表中的數(shù)據(jù) `guest`
- --
- -- --------------------------------------------------------
- --
- -- 表的結(jié)構(gòu) `post`
- --
- CREATE TABLE IF NOT EXISTS `post` (
- `id` int(11) NOT NULL auto_increment COMMENT 'post主鍵',
- `guest_id` varchar(11) NOT NULL COMMENT '發(fā)布人id',
- `post` text NOT NULL COMMENT '發(fā)布內(nèi)容',
- `post_time` varchar(14) NOT NULL COMMENT '發(fā)布時(shí)間',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
- --
- -- 導(dǎo)出表中的數(shù)據(jù) `post`
- --
- --
詳細(xì)的分析也就這么五個(gè)步驟了,那么我們開(kāi)始第一步吧,利用PHP提供的內(nèi)置函數(shù)mysql_connect來(lái)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)鏈接,這個(gè)函數(shù)需要三個(gè)參數(shù),格式如下.
Mysql_connect(‘數(shù)據(jù)庫(kù)所在的主機(jī)’,’鏈接數(shù)據(jù)庫(kù)的用戶名’,’鏈接數(shù)據(jù)庫(kù)的密碼’),這個(gè)函數(shù)返回一個(gè)數(shù)據(jù)庫(kù)連接資源號(hào).
看我們?cè)趐ost.php中的鏈接代碼,代碼如下:
$con=mysql_connect('localhost','root','root') or die('鏈接數(shù)據(jù)庫(kù)失敗!');
mysql_query('set names utf8');
mysql_select_db('GuestBook');
第一行創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接,把資源號(hào)賦給變量$con,如果連接失敗,結(jié)束程序的執(zhí)行輸出提示信息“鏈接數(shù)據(jù)庫(kù)失敗!”.
第二行發(fā)送一個(gè)字符集設(shè)定語(yǔ)句,讓數(shù)據(jù)在數(shù)據(jù)庫(kù)中的出入都使用utf8字符集,這個(gè)語(yǔ)句是可有可無(wú)的,其中的語(yǔ)句可以寫成set names gbk或者set names gb2312等等我們需要的字符集.
第三行利用PHP提供的mysql_select_db函數(shù)來(lái)選擇我們要使用的數(shù)據(jù)庫(kù).
值得注意的是,mysql_query這個(gè)函數(shù)本身有兩個(gè)參數(shù):第一個(gè)參數(shù)就是我們要發(fā)送的數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句sql,第二個(gè)參數(shù)是數(shù)據(jù)庫(kù)連接的資源編號(hào),如果第二個(gè)參數(shù)沒(méi)有指定的話,那么程序就會(huì)查找最近一個(gè)鏈接資源,也就是說(shuō)這個(gè)參數(shù)不是必須的,我們以上包括將來(lái)的寫法都是沒(méi)有第二個(gè)參數(shù)的,按照程序的上下文我們第二行的語(yǔ)句可以寫作:
mysql_query(“set names utf8”,$con)這樣也是正確的.
這個(gè)函數(shù)的返回值是布爾型的,如果語(yǔ)句成功執(zhí)行就返回true否則返回false——了解這一點(diǎn)很重要,到此為止我們的數(shù)據(jù)庫(kù)連接已經(jīng)就緒,開(kāi)始組裝我們的sql插入語(yǔ)句,看一下代碼,post.php:
- $insertSql="insert into guest (name,qq,email) values ('$name','$qq','$email')";
- if(mysql_query($insertSql)){
- $guestid = mysql_insert_id();
- }
- else{
- echo $insertSql;
- echo mysql_error();
- echo "數(shù)據(jù)插入失敗!";
- exit();
- }
在這個(gè)片段的第一行中我們組建了一個(gè)sql的插入語(yǔ)句,這個(gè)看來(lái)沒(méi)什么可說(shuō)的,唯一點(diǎn)就是把變量寫進(jìn)這些語(yǔ)句并且用引號(hào)包裹起來(lái)——對(duì)于數(shù)字型的不需要引號(hào).
第二句發(fā)送語(yǔ)句,并判斷是否被成功執(zhí)行。
這個(gè)地方需要說(shuō)明:PHP中if判斷中的語(yǔ)句是會(huì)被執(zhí)行的,例如if($c=$a+$b)這樣的語(yǔ)句被執(zhí)行的順序是,先計(jì)算里面的語(yǔ)句然后再對(duì)結(jié)果作出判斷。所以執(zhí)行之后$c的值是$a,$b之和,判斷的時(shí)候是對(duì)$c作出的判讀。
所以在這個(gè)地方if判斷的是mysql_query($insertSql)的返回結(jié)果,語(yǔ)句已經(jīng)發(fā)送到了數(shù)據(jù)庫(kù)。
第三行出現(xiàn)的函數(shù)mysql_insert_id——獲取最近一次插入數(shù)據(jù)的時(shí)候自增序列的值,我們這里獲取的是guest表中的id,因?yàn)橹挥羞@個(gè)id才是自增的,以備后用。
這個(gè)片段的第五行到最后都是進(jìn)行的錯(cuò)誤處理,如果語(yǔ)句沒(méi)有被成功執(zhí)行,那么就執(zhí)行這些程序,倒數(shù)第二行的exit();函數(shù)的意思是終止程序向下執(zhí)行.
這時(shí)候我們已經(jīng)把guest信息保存到了Mysql的GuestBook的guest表中了,看一下post.php文件,代碼如下:
- //把以上插入取得的客戶id和留言信息插入到post表中
- $post_time = time();
- $insertPostSql = "insert into post(guest_id,post,post_time) values('$guestid','$post','$post_time')";
- if(mysql_query($insertPostSql)){
- echo <<<tem
- <script>
- alert("留言成功");
- location.href="index.php";
- //開(kāi)源代碼Vevb.com
- </script>
- tem;
- }
- else{
- echo <<<tem
- <script>
- alert("留言失敗");
- location.href="index.php";
- </script>
- tem;
- }
新聞熱點(diǎn)
疑難解答