PHP連接數(shù)據(jù)庫(kù)之PHP連接MYSQL數(shù)據(jù)庫(kù)代碼
成都創(chuàng)新互聯(lián)公司服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
?php???
$mysql_server_name='localhost';?
//改成自己的mysql數(shù)據(jù)庫(kù)服務(wù)器??
$mysql_username='root';?
//改成自己的mysql數(shù)據(jù)庫(kù)用戶名??
$mysql_password='12345678';?
//改成自己的mysql數(shù)據(jù)庫(kù)密碼??
$mysql_database='mycounter';
//改成自己的mysql數(shù)據(jù)庫(kù)名??
$conn=mysql_connect($mysql_server_name,
$mysql_username,$mysql_password,
$mysql_database);???
$sql='CREATE?DATABASE?mycounter?
DEFAULT?CHARACTER?SET?gbk?COLLATE?gbk_chinese_ci;???
';???
mysql_query($sql);???
$sql='CREATE?TABLE?`counter`?
(`id`?INT(255)?UNSIGNED?NOT?NULL?
AUTO_INCREMENT?,`count`?INT(255)?
UNSIGNED?NOT?NULL?DEFAULT?0,PRIMARY?KEY?
(?`id`?)?)?TYPE?=?innodb;';???
mysql_select_db($mysql_database,$conn);???
$result=mysql_query($sql);???
//echo?$sql;???
mysql_close($conn);???
echo?"Hello!數(shù)據(jù)庫(kù)mycounter已經(jīng)成功建立!";???
??
PHP連接數(shù)據(jù)庫(kù)之PHP連接ACCESS數(shù)據(jù)庫(kù)代碼方法
???
$conn?=?new?com("ADODB.Connection");???
$connstr?=?"DRIVER={Microsoft
Access?Driver?(*.mdb)};?
DBQ=".?realpath("data/db.mdb");???
$conn-Open($connstr);???
$rs?=?new?com("ADODB.RecordSet");???
$rs-Open("select?*
from?szd_t",$conn,1,1);???
while(!?$rs-eof)?{???
$f?=?$rs-Fields(1);???
echo?$f-value;???
$rs-MoveNext();???
}???
?
php可以和很多數(shù)據(jù)庫(kù)連接,都有內(nèi)置函數(shù),和哪一個(gè)數(shù)據(jù)庫(kù)連接都有一個(gè)連接函數(shù),但是都有一個(gè)特點(diǎn),就是都需要服務(wù)器名,用戶名,密碼,連接成功就可以選擇數(shù)據(jù)庫(kù),在執(zhí)行SQL語句,找個(gè)PHP手冊(cè),里面各種對(duì)數(shù)據(jù)庫(kù)操作的函數(shù)。
由于數(shù)據(jù)庫(kù)很多,標(biāo)準(zhǔn)不統(tǒng)一,有機(jī)構(gòu)用PHP寫了一個(gè)統(tǒng)一的代碼,例如adodb,使用的時(shí)候就只需要在連接的函數(shù)里面指出是那種數(shù)據(jù)庫(kù),減少很多不必要的麻煩。
1231231231231231312
觸發(fā)器
1. 什么是觸發(fā)器
觸發(fā)器是一種特殊類型的存儲(chǔ)過程,不由用戶直接調(diào)用。創(chuàng)建觸發(fā)器時(shí)會(huì)對(duì)其進(jìn)行定義,以便在對(duì)特定表或列作特定類型的數(shù)據(jù)修改時(shí)執(zhí)行。
觸發(fā)器從本質(zhì)上來說,是一個(gè)存儲(chǔ)過程,但是它與普通的存儲(chǔ)過程不一樣的地方在于,普通的存儲(chǔ)過程是通過CALL方法進(jìn)行調(diào)用的,而觸發(fā)器不是用CALL調(diào)用,觸發(fā)器是在我們提前設(shè)定好的事件出現(xiàn)以后,自動(dòng)被調(diào)用的。
2.為什么要用觸發(fā)器
我們?cè)贛ySQL 5.0中包含對(duì)觸發(fā)器的支持是由于以下原因:
(1)MySQL早期版本的用戶長(zhǎng)期有需要觸發(fā)器的要求。
(2)我們?cè)?jīng)許諾支持所有ANSI標(biāo)準(zhǔn)的特性。
(3)您可以使用它來檢查或預(yù)防壞的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。
(4)您可以改變或者取消INSERT, UPDATE以及DELETE語句。
(5)您可以在一個(gè)會(huì)話中監(jiān)視數(shù)據(jù)改變的動(dòng)作。在這里我假定大家都讀過"MySQL新特性"叢書的第一集--"MySQL存儲(chǔ)過程",那么大家都應(yīng)該知道MySQL至此存儲(chǔ)過程和函數(shù),那是很重要的知識(shí),因?yàn)樵谟|發(fā)器中你可以使用在函數(shù)中使用的語句。特別舉個(gè)例子:
①?gòu)?fù)合語句(BEGIN / END)是合法的.
②流控制(Flow-of-control)語句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.
③變量聲明(DECLARE)以及指派(SET)是合法的.
④允許條件聲明.
⑤異常處理聲明也是允許的.
⑥但是在這里要記住函數(shù)有受限條件:不能在函數(shù)中訪問表.
因此在函數(shù)中使用以下語句是非法的。
ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE
DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL
LOCK OPTIMIZE REPAIR REPLACE REVOKE
ROLLBACK SAVEPOINT 'SELECT FROM table'
'SET system variable' 'SET TRANSACTION'
SHOW 'START TRANSACTION' TRUNCATE UPDATE
在觸發(fā)器中也有完全一樣的限制.觸發(fā)器相對(duì)而言比較新,因此會(huì)有(bugs)缺陷.所以我在這里給大家警告,就像我在存儲(chǔ)過程書中所說那樣.不要在
含有重要數(shù)據(jù)的數(shù)據(jù)庫(kù)中使用這個(gè)觸發(fā)器,如果需要的話在一些以測(cè)試為目的的數(shù)據(jù)庫(kù)上使用,同時(shí)在你對(duì)表創(chuàng)建觸發(fā)器時(shí)確認(rèn)這些數(shù)據(jù)庫(kù)是默認(rèn)的。
2.1 觸發(fā)器的主要用途
觸發(fā)器主要用于在多個(gè)有相互關(guān)系的表之間,做一些相互關(guān)聯(lián)的操作。
2.2 臨時(shí)表
更新:更新是用一條新的數(shù)據(jù) 替換一條舊的數(shù)據(jù)。在系統(tǒng)中,更新操作分為以下2個(gè)步驟:
(1)首先,把舊的數(shù)據(jù)刪掉
(2)把新的數(shù)據(jù)插入表中。
在進(jìn)行以上兩個(gè)步驟之前,系統(tǒng)又進(jìn)行了3個(gè)步驟:
(1) 系統(tǒng)創(chuàng)建兩張臨時(shí)表,臨時(shí)表與要操作的表的結(jié)構(gòu)完全相同,僅是結(jié)構(gòu)相同,但是臨時(shí)表中并無數(shù)據(jù)。
(2) 系統(tǒng)向其中一張臨時(shí)表插入要更新的數(shù)據(jù),
(3) 系統(tǒng)把要?jiǎng)h除的,即要被更新的數(shù)據(jù),插入另外一張臨時(shí)表當(dāng)中。
2.2.1 臨時(shí)表的叫法:
NEW:用來插入新數(shù)據(jù)的臨時(shí)表
OLD:數(shù)據(jù)要被替換的臨時(shí)表
2.2.2 臨時(shí)表的使用
NEW 列名獲取插入值
2.2.3 使用不同的語句與使用臨時(shí)表的關(guān)系
使用UPDATA語句:可以使用NEW和OLD兩張臨時(shí)表
使用INSERT語句:只能使用NEW臨時(shí)表
使用DELETE語句:只能使用OLD臨時(shí)表
如果公司里有上百個(gè)表要做觸發(fā)器,如果手動(dòng)寫代碼的話。很累,一個(gè)小程序,自動(dòng)生成mysql的觸發(fā)代碼。
?php
$dbname = 'test';//數(shù)據(jù)庫(kù)
$tab1 = 'user'; //執(zhí)行的表
$tab2 = 'user_bak'; //被觸發(fā)的表
$conn = mysql_connect("localhost","root", "root",$dbname) or
die("請(qǐng)檢查你的主機(jī)名數(shù)據(jù)庫(kù)用戶名和密碼");
mysql_select_db($dbname, $conn) or die("數(shù)據(jù)庫(kù)還沒有連接");
$query = mysql_query("SHOW COLUMNS FROM $tab1");mysql_query("");
while($row=mysql_fetch_array($query,MYSQL_NUM)){//得到表的字段數(shù)組
$temp[] = $row[0];
$str1 .= '`'.$row[0].'`,';
$str2 .= 'new.'.$row[0].',';
$str3 .= $row[0].'=new.'.$row[0].',';
}
//insert觸發(fā)器
$inser_str = "h1{$tab1}表的insert觸發(fā)器/h1";
$inser_str .= "create trigger ".$tab1."_insert brAFTER INSERT
bron ".$tab1."br";
$inser_str .="for each rowbr INSERT INTO {$tab2}
(".rtrim($str1,',').') VALUES ('.rtrim($str2,',').');';
//update觸發(fā)器
$update_str = "h1{$tab1}表的update觸發(fā)器/h1";
$update_str .= "create trigger ".$tab1."_updatebr";
$update_str .= "after updatebr";
$update_str .= "on ".$tab1.'br';
$update_str .= "for each rowbr";
$update_str .= "update ".$tab2." set ".rtrim($str3,',')." where id =
new.id;//這里的where id = new.id要手動(dòng)改一下。改成主鍵的字段名";
//delete觸發(fā)器
$delete_str = "h1{$tab1}表的delete觸發(fā)器/h1";
$delete_str .= "create trigger ".$tab1."_deletebr";
$delete_str .= "after deletebr";
$delete_str .= "on ".$tab1."br";
$delete_str .= "for each row br";
$delete_str .= "delete from ".$tab2." where id=OLD.id//這里的where id =
new.id要手動(dòng)改一下。改成主鍵的字段名br";
echo $inser_str;
echo $update_str;
echo $delete_str;
echo
'p注意:br1.觸發(fā)器可用于InnoDB或MyISAM類型的表br2.插入的時(shí)候用AFTER INSERT
更好的保證數(shù)據(jù)ID的對(duì)應(yīng),如果用before
INSERT有可能造成ID不對(duì)應(yīng)br3.如new.id則是表示主表中的字段br4.sql語句太多,用
begin..endbr5.使用show triggers語句查看數(shù)據(jù)庫(kù)中的觸發(fā)器。br6.刪除觸發(fā)器DROP TRIGGER
IF EXISTS `test`br7.作者:a
href=""華夏之星/a';
echo EOT
h3語法:/h3
create trigger 觸發(fā)器名稱br
{ before | after}br
{insert | update | delete}br
on 表名br
for each rowbr
觸發(fā)器SQL語句br
參數(shù)詳解如下:br
create trigger 觸發(fā)器名稱:創(chuàng)建一個(gè)新觸發(fā)器,并指定觸發(fā)器的名稱。br
{ before | after}:用于指定在insert、update或delete語句執(zhí)行前觸發(fā)還是在語句執(zhí)行后觸發(fā)。br
on 表名:用于指定響應(yīng)該觸發(fā)器的表名。br
for each row:觸發(fā)器的執(zhí)行間隔,for each row
通知觸發(fā)器每隔一行執(zhí)行一次動(dòng)作,而不是對(duì)整個(gè)表執(zhí)行一次。br
觸發(fā)器SQL語句:觸發(fā)器要執(zhí)行的SQL語句,如果該觸發(fā)器要執(zhí)行多條SQL語句,要將多條語句放在begin…end塊中。
br如:begin…end塊(它不能上phpadmin上運(yùn)行。因?yàn)閜hpmyadmin沒有對(duì)begin...end解析。)br
mysql_query("br
create trigger user_deletebr
after deletebr
on userbr
for each row BEGINbr
delete from user_bak where id=OLD.id;br
delete from aaa where id=OLD.id;br
END;");br
brbrbrbr
EOT;
?
html:
a?href="get_data.php?id=每條數(shù)據(jù)的ID"?target='_black'查看/a
php處理文件:
$id?=?trim($_GET['id']);
$sql?=?"select?*?from?你的數(shù)據(jù)表名字?where?id='".$id."'";
發(fā)送這條SQL語句-》接收結(jié)果-》再顯示內(nèi)容就可以
文章題目:數(shù)據(jù)庫(kù)觸發(fā)php,數(shù)據(jù)庫(kù)觸發(fā)器在哪里看
分享路徑:http://newbst.com/article44/hsephe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、做網(wǎng)站、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)公司、用戶體驗(yàn)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)