7PHP訪問數(shù)據(jù)庫_第1頁
7PHP訪問數(shù)據(jù)庫_第2頁
7PHP訪問數(shù)據(jù)庫_第3頁
7PHP訪問數(shù)據(jù)庫_第4頁
7PHP訪問數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩124頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PHP 動(dòng)態(tài)網(wǎng)站程序設(shè)計(jì)(第2版) 唐四薪 主編 人民郵電出版社ISBN:978-7-115-50524-8 2020年3月第7章 PHP訪問數(shù)據(jù)庫 網(wǎng)站數(shù)據(jù)庫化的好處將網(wǎng)站數(shù)據(jù)庫化,就是使用數(shù)據(jù)庫來管理整個(gè)網(wǎng)站。只要更新數(shù)據(jù)庫的內(nèi)容,網(wǎng)站的內(nèi)容就會(huì)被自動(dòng)更新。將網(wǎng)站數(shù)據(jù)庫化的好處如下: 可以自動(dòng)更新網(wǎng)頁。 加強(qiáng)搜索功能??梢詫?shí)現(xiàn)各種基于數(shù)據(jù)庫的應(yīng)用。 7.1 訪問MySQL數(shù)據(jù)庫PHP訪問MySQLPHP提供了大量的MySQL數(shù)據(jù)庫操作內(nèi)置函數(shù)PHP訪問MySQL數(shù)據(jù)庫的三種方法:mysql內(nèi)置函數(shù)mysqli內(nèi)置函數(shù)PDO數(shù)據(jù)接口層PHP訪問數(shù)據(jù)庫的步驟 瀏覽器Apache數(shù)據(jù)庫1數(shù)據(jù)庫2

2、 連接數(shù)據(jù)庫 創(chuàng)建結(jié)果集$rowtitle 輸出字段到頁面數(shù)據(jù)庫服務(wù)器連接數(shù)據(jù)庫服務(wù)器訪問數(shù)據(jù)庫的步驟連接數(shù)據(jù)庫服務(wù)器連接數(shù)據(jù)庫創(chuàng)建結(jié)果集取結(jié)果集中的一行mysql_connectmysql_select_dbmysql_querymysql_fetch_assoc$conn=mysql_connect(localhost,root,111);mysql_select_db(guestbook,$conn);第一步連接數(shù)據(jù)庫瀏覽器數(shù)據(jù)庫數(shù)據(jù)庫 連接數(shù)據(jù)庫連接數(shù)據(jù)庫服務(wù)器Apache第二步創(chuàng)建結(jié)果集瀏覽器數(shù)據(jù)庫 創(chuàng)建結(jié)果集數(shù)據(jù)庫$result=mysql_query(Select * from

3、lyb,$conn); 連接數(shù)據(jù)庫連接數(shù)據(jù)庫服務(wù)器Apache第三步取出結(jié)果集中的一行瀏覽器數(shù)據(jù)庫 連接數(shù)據(jù)庫 創(chuàng)建結(jié)果集$rowtitle 輸出字段到頁面數(shù)據(jù)庫$row=mysql_fetch_assoc($result); echo $rowtitle; Apache頁面顯示數(shù)據(jù)表中的數(shù)據(jù)了設(shè)置字符集提示:在連接數(shù)據(jù)庫服務(wù)器之后、選擇數(shù)據(jù)庫之前一般要設(shè)置字符集conn.php把連接數(shù)據(jù)庫的代碼寫在單獨(dú)的文件中總結(jié):訪問數(shù)據(jù)庫的步驟 建立與MySQL服務(wù)器的連接; 設(shè)置字符集; 選擇要操作的數(shù)據(jù)庫 創(chuàng)建結(jié)果集 將結(jié)果集中的一行記錄讀入數(shù)組中 在網(wǎng)頁上輸出數(shù)組元素的值 7.2.2 創(chuàng)建結(jié)果集并

4、輸出記錄創(chuàng)建結(jié)果集結(jié)果集: 結(jié)果集是內(nèi)存中的一個(gè)表記錄1記錄2記錄3結(jié)果集指針falsefalse連接數(shù)據(jù)庫是和指定的數(shù)據(jù)庫建立聯(lián)系,而創(chuàng)建結(jié)果集是和該數(shù)據(jù)庫中指定的表建立聯(lián)系 取出結(jié)果集中的一行用mysql_fetch_row()取出結(jié)果集中的一行到數(shù)組中記錄1記錄2記錄3結(jié)果集指針falsefalseArray ( 0 = 1 1 = 祝大家 4 = 女 )注意:該方法有兩個(gè)作用:將結(jié)果集指針當(dāng)前指向的記錄保存到數(shù)組中然后將結(jié)果集指針下移一條記錄 取結(jié)果集中一行的方法mysql_fetch_row():將當(dāng)前記錄保存到一個(gè)索引數(shù)組中。mysql_fetch_assoc():將當(dāng)前記錄保存到

5、一個(gè)關(guān)聯(lián)數(shù)組中。mysql_fetch_array():將當(dāng)前記錄保存到一個(gè)含有索引和關(guān)聯(lián)的混合數(shù)組中mysql_fetch_object()推薦用第2種在頁面上輸出數(shù)據(jù)步驟:創(chuàng)建結(jié)果集用mysql_fetch_assoc()取出結(jié)果集中的一行到數(shù)組中輸出數(shù)組中的元素即可,如echo $rowtitle ; 在頁面上輸出結(jié)果集中的數(shù)據(jù)$row=mysql_fetch_assoc($result) 移動(dòng)結(jié)果集指針的方法移動(dòng)到下一條記錄mysql_fetch_assoc($result) 移動(dòng)到指定的記錄mysql_data_seek($result,3); 輸出多個(gè)字段或多條記錄輸出多個(gè)字段輸出

6、多條記錄 輸出第1條輸出第2條使用循環(huán)語句輸出所有記錄循環(huán)體 使用循環(huán)語句輸出所有記錄循環(huán)體 使用循環(huán)語句輸出n條記錄方法1:使用for循環(huán),限定循環(huán)次數(shù)為n; 方法2:Select * from lyb limit n ,這樣結(jié)果集中就只有n條記錄了。 推薦用第二種方法 2. 在頁面上輸出單個(gè)字段 mysql_result()函數(shù)可以返回結(jié)果集指針當(dāng)前指向記錄的某個(gè)字段值。語法為:mysql_result(result, row, field) 例如:echo mysql_result($result,1,author);輸出第2條記錄的author字段的值,然后把結(jié)果集指針下移一條記錄 5

7、. 返回記錄總數(shù) mysql_num_rows()函數(shù)可以返回結(jié)果集中的記錄總數(shù) 例如:共有條記錄 6. mysql_db_query()函數(shù)mysql_db_query()函數(shù)可以同時(shí)選擇數(shù)據(jù)庫和創(chuàng)建結(jié)果集 mysql_select_db(guestbook,$conn); $result=mysql_query(Select * from lyb, $conn); 可以用mysql_db_query()改寫為:$result=mysql_db_query(guestbook,Select * from lyb,$conn); 釋放結(jié)果集和關(guān)閉數(shù)據(jù)庫連接釋放結(jié)果集mysql_free_res

8、ult() mysql_free_result($result); 關(guān)閉數(shù)據(jù)庫連接mysql_close() mysql_close($conn); 輸出記錄的應(yīng)用制作新聞網(wǎng)站制作一個(gè)網(wǎng)站要制作三個(gè)頁面網(wǎng)站首頁欄目首頁內(nèi)頁輸出多個(gè)記錄集中的記錄輸出一個(gè)記錄集的多條記錄輸出一條記錄7.6 新聞網(wǎng)站綜合實(shí)例制作新聞網(wǎng)站的首頁輸出多個(gè)記錄集中的記錄網(wǎng)站首頁創(chuàng)建數(shù)據(jù)庫連接根據(jù)欄目名創(chuàng)建相應(yīng)的結(jié)果集循環(huán)輸出記錄到這個(gè)欄目框關(guān)閉記結(jié)果集根據(jù)下一個(gè)欄目名創(chuàng)建相應(yīng)的結(jié)果集制作欄目首頁制作欄目首頁輸出記錄集中的多條記錄欄目首頁連接數(shù)據(jù)庫根據(jù)首頁傳過來的欄目名創(chuàng)建記錄集輸出所有記錄到欄目框中(可能還需分頁)關(guān)閉記

9、錄集制作內(nèi)頁制作內(nèi)頁輸出單條記錄內(nèi)頁連接數(shù)據(jù)庫根據(jù)其他頁傳過來的ID值創(chuàng)建記錄集(該記錄集中只有一條記錄)輸出該條記錄的各個(gè)字段到頁面合適位置上關(guān)閉記錄集5.2.3 使用mysql_query方法添加記錄1. 利用Insert語句添加記錄?require(conn.php);mysql_query( insert into lyb ( title, content, author, email,date) values (大家好, PHP學(xué)習(xí), 小浣熊, s,2012-3-3) or die(執(zhí)行失敗); echo 新增記錄的id是.mysql_insert_id(); 提示:執(zhí)行添加記錄不會(huì)

10、創(chuàng)建結(jié)果集,因此mysql_query前不要寫$result=不要插入自動(dòng)遞增字段的值返回插入記錄的自動(dòng)遞增字段值5.2.3 使用mysql_query方法刪除記錄2. 利用Delete語句刪除記錄 本次操作共有條記錄被刪除 ! 可返回影響的記錄數(shù) 5.2.3 使用mysql_query方法更新記錄3. 利用Update語句更新記錄133 and ID 記錄新聞頁面的點(diǎn)擊次數(shù)mysql_query(update news set hits=hits+1 where id= .$_GETid.); mysql_query方法的總結(jié)mysql_query()方法參數(shù)為Select語句:創(chuàng)建記錄集參

11、數(shù)為其他SQL語句:執(zhí)行增、刪、改操作參數(shù)為設(shè)置字符集命令:設(shè)置字符集網(wǎng)站的結(jié)構(gòu)分析網(wǎng)站的前臺(tái):顯示記錄網(wǎng)站的后臺(tái):添加、刪除、修改記錄添加、刪除、修改記錄的綜合實(shí)例 該實(shí)例能對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行顯示、添加、刪除和修改。程序主要包括管理主界面,添加記錄模塊、刪除記錄模塊和更新記錄模塊。5-6.php 數(shù)據(jù)管理主界面 addform.php insert.php 添加記錄模塊 delete.php 刪除記錄模塊 editform.php edit.php 更新記錄模塊數(shù)據(jù)管理主界面5-6.php 通過超鏈接傳遞記錄ID請(qǐng)注意“刪除”超鏈接:a href=del.php?id=刪除刪除刪除刪除刪除

12、增、刪、改的原理添加記錄 獲取表單數(shù)據(jù) 將記錄插入記錄集添加記錄的步驟瀏覽器IIS數(shù)據(jù)庫 連接數(shù)據(jù)庫數(shù)據(jù)庫 執(zhí)行插入語句$title=$_POSTtitle 獲取數(shù)據(jù)mysql_query(“Insert into ”)增、刪、改的原理刪除記錄獲取記錄ID根據(jù)ID執(zhí)行刪除語句刪除記錄的步驟瀏覽器IIS數(shù)據(jù)庫 連接數(shù)據(jù)庫數(shù)據(jù)庫$id=$_GETid 獲取記錄ID 執(zhí)行刪除語句mysql_query(“delete from ”)確認(rèn)刪除的實(shí)現(xiàn)a href=del.php?id= onclick=return confirm(確認(rèn)要?jiǎng)h除嗎?) 刪除同時(shí)刪除多條記錄input type=checkb

13、ox name=selected value= 必須是數(shù)組同時(shí)刪除多條記錄的實(shí)現(xiàn) $selectid=$_POSTselected;if( count($selectid)0)$sel=implode(,$selectid); /將各個(gè)數(shù)組元素用“,”號(hào)連接起來mysql_query( delete From lyb where ID in ($sel) or die(執(zhí)行失敗);增、刪、改的原理修改記錄 顯示記錄到表單中 獲取表單數(shù)據(jù)和記錄ID根據(jù)ID創(chuàng)建記錄集根據(jù)表單數(shù)據(jù)修改記錄修改記錄的步驟(第1次與數(shù)據(jù)庫通信)瀏覽器數(shù)據(jù)庫 連接數(shù)據(jù)庫 創(chuàng)建結(jié)果集$rowtitle 輸出字段到表單數(shù)據(jù)庫

14、Apache修改記錄的步驟(第2次與數(shù)據(jù)庫通信)瀏覽器數(shù)據(jù)庫 連接數(shù)據(jù)庫數(shù)據(jù)庫$id=$_GETid 獲取ID和數(shù)據(jù) 執(zhí)行更新語句mysql_query(update )$title=$_POSTtitleApache總結(jié)添加記錄獲取表單數(shù)據(jù)將記錄寫入結(jié)果集刪除記錄獲取記錄ID根據(jù)ID創(chuàng)建結(jié)果集刪除記錄修改記錄 顯示記錄到表單中 獲取表單數(shù)據(jù)和記錄ID根據(jù)ID創(chuàng)建結(jié)果集根據(jù)表單數(shù)據(jù)修改記錄查詢記錄的實(shí)現(xiàn) 提供一個(gè)表單供用戶輸入查詢關(guān)鍵字將用戶提交的關(guān)鍵字作為條件用Select語句進(jìn)行查詢將查詢的結(jié)果(返回的記錄集)顯示在網(wǎng)頁中。 查詢程序的關(guān)鍵代碼$keyword=trim($_GETkeyw

15、ord);/獲取輸入的關(guān)鍵字$sel=$_GETsel; $sql=select * from lyb;if ($keyword )$sql=$sql . where $sel like %$keyword%; 7.3 分頁顯示數(shù)據(jù)網(wǎng)頁中的分頁效果7.3 分頁顯示數(shù)據(jù)第1條第2條第3條第4條第5條第6條第7條第8條第9條第10條第11條第12條第13條第14條第二頁第三頁第四頁第一頁分頁技術(shù)的實(shí)現(xiàn)在數(shù)據(jù)庫服務(wù)器實(shí)現(xiàn):通過創(chuàng)建結(jié)果集的方式來分頁在Web服務(wù)器實(shí)現(xiàn):通過PHP循環(huán)語句讀取結(jié)果集中某頁范圍的記錄在瀏覽器端實(shí)現(xiàn):通過客戶端JavaScript腳本只顯示某頁記錄對(duì)應(yīng)的HTML元素分頁程序

16、實(shí)現(xiàn)的步驟 設(shè)置每頁顯示的記錄數(shù) 獲取記錄總數(shù) 計(jì)算總共有多少頁 取得要顯示第幾頁的記錄 通過超鏈接傳遞頁碼 1. 設(shè)置每頁顯示的記錄數(shù) 每頁顯示5條記錄$PageSize=5; 2. 獲取結(jié)果集中的記錄總數(shù)兩種方法:1.通過mysql_num_rows()函數(shù)返回記錄總數(shù) $RecordCount=mysql_num_rows($result);2.通過select語句中的count函數(shù)實(shí)現(xiàn):$result=mysql_query(Select count(*) from lyb,$conn); $row=mysql_fetch_row($result);$RecordCount=$row0

17、;3. 計(jì)算總頁數(shù)通過$RecordCount和$PageSize兩個(gè)變量的值計(jì)算 $PageCount =ceil($RecordCount/$PageSize); 返回大于或等于x并且最接近x的整數(shù) 4. 如何顯示第n頁的記錄使用limit子句限定顯示記錄的范圍 SELECT * FROM 表名 LIMIT 起始位置, 顯示記錄數(shù)量 例如:若頁碼保存在$Page中,要獲取第$Page頁顯示的記錄 Select * From 表名 Limit ($1)*$PageSize, $PageSize 顯示第n頁的記錄的程序 5. 通過超鏈接轉(zhuǎn)到要顯示的分頁http:/localhost/php/5

18、-9.php?page=2 if(isset($_GETpage) /獲取到的頁碼不為空$Page=$_GETpage;else$Page=1;但普通用戶不會(huì)知道在URL上輸入類似?page=2之類的參數(shù)來訪問分頁 傳遞分頁鏈接 定義分頁鏈接可以定義幾個(gè)分頁鏈接,供用戶點(diǎn)擊?!暗谝豁摗辨溄拥拇a如下:echo 第一頁 ; “上一頁”鏈接的代碼如下:echo 上一頁 ;“下一頁”鏈接的代碼如下:echo 下一頁 ;“末頁”鏈接的代碼如下:echo 末頁 ;在Web服務(wù)器實(shí)現(xiàn)分頁 特點(diǎn):結(jié)果集包含所有記錄,而不是1頁的記錄然后將結(jié)果集的指針指向第n頁的第1條記錄,然后用for循環(huán)循環(huán)輸出$Page

19、Size條記錄 通過移動(dòng)結(jié)果集指針進(jìn)行分頁 $result=mysql_query(Select * from lyb, $conn); /將指針指向第$Page頁第1條記錄 mysql_data_seek($result,($1)* $PageSize); for($i=0;$imysql_data_seek(result, row)函數(shù)的功能是將結(jié)果集result的指針移動(dòng)到指定的行數(shù)row 5.4.2 對(duì)查詢結(jié)果進(jìn)行分頁在獲取了用戶輸入的查詢值后,一方面將它傳遞給SQL語句進(jìn)行查詢,另一方面將其保存在分頁鏈接的URL參數(shù)(或表單隱藏域)中 5.4.3 將分頁程序?qū)懗珊瘮?shù)分頁函數(shù)的輸入?yún)?shù)

20、有: 記錄總數(shù)$RecordCount,每頁顯示的記錄數(shù)$PageSize, 當(dāng)前顯示哪一頁$Page; 當(dāng)前頁的url;查詢關(guān)鍵字$keyword(如沒有查詢關(guān)鍵字,可不設(shè)置$keyword)2. 調(diào)用分頁函數(shù)實(shí)現(xiàn)分頁 page($RecordCount,$PageSize,$Page,$url,$keyword); 5.4.4 可設(shè)置每頁顯示記錄數(shù)的分頁程序設(shè)置pagesize屬性為用戶設(shè)置的分頁數(shù)將用戶設(shè)置的分頁數(shù)寫入Session變量中,使刷新頁面不會(huì)丟失自定義每頁記錄數(shù)的分頁程序7.4 mysqli擴(kuò)展函數(shù)的使用mysqli擴(kuò)展函數(shù)的使用 一種新的訪問mysql數(shù)據(jù)庫的函數(shù)庫mysq

21、li被封裝到一個(gè)類中,它是一種面向?qū)ο蟮募夹g(shù),其中i表示改進(jìn)(improvement),其執(zhí)行速度更快 要使用mysqli,需在php.ini中進(jìn)行配置:;extension=php_mysqli.dll去掉前面的注釋符(;) 使用mysqli函數(shù)訪問數(shù)據(jù)庫的步驟與mysql函數(shù)非常類似,也分為4步 連接數(shù)據(jù)庫 創(chuàng)建結(jié)果集取出結(jié)果集中的一行到數(shù)組中輸出數(shù)組元素到頁面5.5.1 連接mysql數(shù)據(jù)庫1. 使用mysqli_connect()函數(shù) mysqli_connect()函數(shù)用來連接MySQL數(shù)據(jù)庫,語法如下:mysqli對(duì)象名= mysqli_connect(數(shù)據(jù)庫服務(wù)器, 用戶名, 密

22、碼, 數(shù)據(jù)庫名) 例如:$conn =mysqli_connect(localhost, root,111,guestbook); 5.5.1 連接mysql數(shù)據(jù)庫2. 聲明mysqli對(duì)象$conn=new mysqli(localhost,root,111,guestbook);也可寫成$conn=new mysqli();$conn-connect(localhost,root,111);$conn-select_db(guestbook);對(duì)象名-方法名-是成員運(yùn)算符 表5-1 mysqli類中的成員方法 方法名功能connect()打開一個(gè)新的連接到MySQL數(shù)據(jù)庫服務(wù)器select

23、_db()選擇當(dāng)前數(shù)據(jù)庫set_charset()設(shè)置客戶端的默認(rèn)字符集close()關(guān)閉先前打開的連接query()執(zhí)行SQL語句,并返回結(jié)果集或不返回multi_query()同時(shí)執(zhí)行多個(gè)查詢語句store_result()在執(zhí)行多查詢語句時(shí),獲取當(dāng)前結(jié)果集next_result()在執(zhí)行多查詢語句時(shí),獲取當(dāng)前結(jié)果集的下一個(gè)結(jié)果集more_results()從多查詢語句中檢查是否有任何更多的查詢結(jié)果集5.5.2 執(zhí)行SQL語句創(chuàng)建結(jié)果集(1)mysqli_query()函數(shù)的語法如下:結(jié)果集= mysqli_query(連接對(duì)象, SQL語句)$result=mysqli_query($c

24、onn,select * from lyb);(2)mysqli對(duì)象的query()函數(shù)的基本語法和示例如下:對(duì)象名-query(SQL語句)$result=$conn-query(select * from lyb);5.5.3 從結(jié)果集中獲取數(shù)據(jù)將指針指向的當(dāng)前記錄保存到數(shù)組$row中,并使結(jié)果集指針指向下一條記錄。 $row=$result-fetch_assoc();完整程序:顯示數(shù)據(jù)表在網(wǎng)頁上 5-17.php表5-2 mysqli_result類中的成員方法 方法名功能fetch_row()以索引數(shù)組的形式返回結(jié)果集中當(dāng)前指向的記錄fetch_assoc()以關(guān)聯(lián)數(shù)組的形式返回結(jié)果

25、集中當(dāng)前指向的記錄fetch_array()以索引數(shù)組和關(guān)聯(lián)數(shù)組的形式返回結(jié)果集中當(dāng)前指向的記錄fetch_object()以對(duì)象的形式返回結(jié)果集中當(dāng)前指向的記錄data_seek(n)將結(jié)果集指針指向第n條記錄fetch_field()從結(jié)果集中獲得某一字段的信息fetch_fields()從結(jié)果集中獲得全部字段的信息field_seek()設(shè)置結(jié)果集中字段的偏移位置close()關(guān)閉結(jié)果集返回結(jié)果集中記錄總數(shù)num_rows是mysqli_result類中的一個(gè)成員屬性:記錄總數(shù) num_rows ?提示:如果要判斷結(jié)果集不為空,只能使用if($result-num_rows0)來判斷,而

26、不能使用if($result)來判斷 5.5.4 同時(shí)執(zhí)行多條SQL語句有時(shí)可能需要同時(shí)執(zhí)行多條SQL語句,比如要在頁面上創(chuàng)建兩個(gè)結(jié)果集 5.5.4 同時(shí)執(zhí)行多條SQL語句可以使用multi_query()函數(shù)同時(shí)執(zhí)行多條SQL語句,創(chuàng)建兩個(gè)結(jié)果集 。如果執(zhí)行的是Select語句,就可以使用store_result()方法將當(dāng)前結(jié)果集取回到客戶端,而用next_result()方法可轉(zhuǎn)到下一個(gè)結(jié)果集。 5.6 新聞網(wǎng)站綜合實(shí)例圖5-32 新聞網(wǎng)站的結(jié)構(gòu)及其對(duì)應(yīng)頁面新聞網(wǎng)站欄目1欄目2欄目n新聞1新聞2新聞3新聞4新聞12新聞13首頁欄目首頁新聞頁數(shù)據(jù)庫設(shè)計(jì)-news表結(jié)構(gòu)字段名字段含義數(shù)據(jù)類型

27、ID新聞的編號(hào)int,自動(dòng)遞增,主鍵title新聞標(biāo)題varcharcontent新聞內(nèi)容TEXTBigClassName新聞所屬的大類名varcharSmallClassName新聞所屬的小類名(可不指定)varcharimagenum該條新聞中含的圖片數(shù)intfirstImageName新聞中第一張圖片的文件名varcharuser新聞發(fā)布者varcharinfotime新聞的發(fā)布日期datetimehits該條新聞的點(diǎn)擊次數(shù)intok是否將該新聞作為圖片新聞顯示(該新聞中必須含有圖片)tinyint網(wǎng)站的后臺(tái)頁面連接數(shù)據(jù)庫文件conn.php采用mysqli函數(shù)連接數(shù)據(jù)庫 connect

28、(localhost,root,111);$conn-select_db(test);$conn-query(set names gb2312);?創(chuàng)建每個(gè)欄目的結(jié)果集$result=$conn-query(select * from news where Bigclassname=通知公告 order by ID desc limit 6); 創(chuàng)建通知公告欄目的結(jié)果集填充結(jié)果集中記錄到欄目框通知公告? for($i=0;$ifetch_assoc();?a href=onews.php?id= close(); 新聞版塊最終效果圖制作動(dòng)態(tài)圖片輪顯效果 1. Pixviewer.swf文件的原

29、理var pics=uppic/1.gif | uppic/2.gif | uppic/3.gif | uppic/4.gif | uppic/5.gifvar links=onews.php?id=88 | onews.php?id=87 | onews.php?id=86 | onews.php?id=8 | onews.php?id=7var texts=愛我雁城、愛我?guī)熢?| 國培計(jì)劃 | 青春舞動(dòng) | 長(zhǎng)春花志愿者協(xié)會(huì) | 朝花夕拾,似水流年 5.6.3 制作動(dòng)態(tài)圖片輪顯效果Do while not rs.Eof % pics+=uppic/依次添加每幅圖片的URL地址 links+

30、=onews.asp?id= texts+= % /如果不是最后一條記錄 If rs.AbsolutePosition pics+=|;links+=|; texts+=|;% end ifrs.MoveNextLoop“上一條”、“下一條”新聞鏈接的制作 “上一條”鏈接主要是要找到上一條新聞的id值。不能通過將本條新聞的id值減1實(shí)現(xiàn)(可能是其他欄目的新聞)應(yīng)該通過一個(gè)查詢語句,找到在同一欄目(bigclassname)中所有id值比該新聞的id值小的記錄,再對(duì)這些記錄進(jìn)行逆序排列,取其中id值最大的一條 5.6.6 FCKeditor的使用FCKeditor是一個(gè)在線編輯器可以像DW的設(shè)計(jì)

31、視圖一樣對(duì)新聞內(nèi)容中的文字和圖片進(jìn)行可視化排版 圖5-37 FCKeditor的目錄結(jié)構(gòu)FCKeditor的使用步驟1. 調(diào)用fckeditor編輯器2. 配置fckeditor編輯器的文件上傳功能3. 配置對(duì)上傳文件進(jìn)行重命名4. 解決文件上傳功能的安全性問題1. 調(diào)用fckeditor編輯器將FCKeditor編輯器嵌入到表單中 替換為:BasePath = fckeditor/; $oFCKeditor-Width=95%; /設(shè)置顯示寬度$oFCKeditor-Height=400px; /設(shè)置顯示高度$oFCKeditor-Value=$rowcontent; /設(shè)置編輯器的值,將顯

32、示在編輯器中$oFCKeditor-Create() ; / 創(chuàng)建編輯器? 2. 配置fckeditor編輯器的文件上傳功能FCKeditor提供了文件瀏覽和文件快速上傳功能 打開fckeditoreditorfilemanagerconnectorsphp目錄中的config文件,找到如下代碼:$ConfigEnabled = true ;$ConfigUserFilesPath =upfiles/ ;/定義上傳目錄再打開fckeditor根目錄下的fckeditor.js,確保以下兩行的值為php:var _FileBrowserLanguage= php ;var _QuickUploa

33、dLanguage= php ;3. 配置對(duì)上傳文件進(jìn)行重命名找到editorfilemanagerconnectorsphp目錄下的io.php文件,將函數(shù)名為SanitizeFolderName的函數(shù)代碼修改如下:function SanitizeFileName( $sNewFileName )$arr = explode(.,$sNewFileName);$ext = array_pop($arr);/第一個(gè)數(shù)組元素保存了. 前的文件名。$filename = date(Ymd_His_).rand(1000,9999).$ext;return $filename ; 4. 解決文件上

34、傳功能的安全性問題假設(shè)網(wǎng)站攻擊者猜測(cè)到了文件上傳程序的路徑,則他可以通過輸入url直接訪問該程序,以上傳文件 為此,需要判斷上傳文件者是否是登錄成功的用戶,這可以通過Session變量判斷 $ConfigEnabled = isset($_SESSIONadmin); 7.6 數(shù)據(jù)庫接口層PDO7.6 數(shù)據(jù)庫接口層PDOPDO(PHP Data Object)是為PHP訪問數(shù)據(jù)庫定義的一個(gè)輕量級(jí)的、一致性的數(shù)據(jù)庫接口 提供了一個(gè)數(shù)據(jù)庫訪問抽象層,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口 PDO是未來PHP在數(shù)據(jù)庫處理方面的主要發(fā)展方向 數(shù)據(jù)庫接口層PDO的位置PHP應(yīng)用程序數(shù)據(jù)庫接口層PDOOracle

35、MySQLPDO_OCIPDO_MYSQLPDO_ODBCODBCADODBSQL ServerAccess5.7.1 PDO的安裝打開PHP的配置文件php.ini,在Dynamic Extensions一節(jié)中,找到:;extension=php_pdo.dll 去掉;號(hào)即可接下來,還需要激活一種或多種PDO驅(qū)動(dòng)程序,添加下面的一行或多行即可。extension=php_pdo_mysql.dllextension=php_pdo_mssql.dllextension=php_pdo_oci.dllextension=php_pdo_odbc.dll查看PDO是否安裝成功echo phpin

36、fo(); 5.7.2 創(chuàng)建PDO對(duì)象連接數(shù)據(jù)庫創(chuàng)建PDO對(duì)象:對(duì)象名=new PDO(string DSN, string username, string password, array driver_options );例如:$dsn=mysql:host=localhost;dbname=guestbook;$db=new PDO($dsn,root,111);參數(shù)1參數(shù)2參數(shù)3PDO對(duì)象使用PDO連接數(shù)據(jù)庫 (conn.php)query(set names gb2312); /設(shè)置字符集? PDO對(duì)象常用的成員方法 當(dāng)PDO對(duì)象創(chuàng)建成功后(數(shù)據(jù)庫連接成功),就可以使用該對(duì)象的方法了

37、 方法名描 述query()執(zhí)行一條有結(jié)果集返回的SQL語句,并返回一個(gè)結(jié)果集PDOStatement對(duì)象exec()執(zhí)行一條SQL語句,并返回所影響的記錄數(shù)lastInsertId()獲取最近一條插入到表中記錄的自增id值prepare()負(fù)責(zé)準(zhǔn)備要執(zhí)行的SQL語句,用于執(zhí)行存儲(chǔ)過程等調(diào)用PDO對(duì)象的方法可以使用“對(duì)象名-方法名”的形式 5.7.3 使用query()方法執(zhí)行查詢使用query()方法可以執(zhí)行一條select查詢語句,并返回一個(gè)結(jié)果集。例如:$result=$db-query(select * from news limit 20); 也可使用query()方法來設(shè)置字符集。

38、例如:$db-query(set names gb2312);PDOStatement類中常用的成員方法 使用PDO對(duì)象的query()方法執(zhí)行Select語句后會(huì)得到一個(gè)結(jié)果集對(duì)象PDOStatement 方法名描述fetch()以數(shù)組或?qū)ο蟮男问椒祷禺?dāng)前指針指向的記錄,并將結(jié)果集指針移至下一行,當(dāng)?shù)竭_(dá)結(jié)果集末尾時(shí)返回FalsefetchAll()返回結(jié)果集中所有的行,并賦給返回的二維數(shù)組,指針將指向結(jié)果集末尾fetchColumn()返回結(jié)果集中下一行某個(gè)列的值setFetchMode()設(shè)置fetch()或fetchAll()方法返回結(jié)果的模式,如關(guān)聯(lián)數(shù)組、索引數(shù)組、混合數(shù)組、對(duì)象等。r

39、owCount()返回結(jié)果集中的記錄總數(shù),僅對(duì)query()和prepare()方法有效columnCount()在結(jié)果集中返回列的總數(shù)bindColumn()將一個(gè)列和一個(gè)指定的變量名綁定(必須設(shè)置fetch方法為FETCH_BOTH)PDO訪問數(shù)據(jù)庫的步驟PDO訪問數(shù)據(jù)庫和mysql函數(shù)訪問數(shù)據(jù)庫的步驟基本上是一致的,即:連接數(shù)據(jù)庫;設(shè)置字符集;創(chuàng)建結(jié)果集; 讀取一條記錄到數(shù)組; 將數(shù)組元素顯示在頁面上。在頁面上輸出記錄query(set names gb2312); $result=$db-query(select * from lyb); /執(zhí)行查詢創(chuàng)建結(jié)果集$result-setFe

40、tchMode(PDO:FETCH_ASSOC);while($row=$result-fetch()/讀取一條記錄到數(shù)組$row中 ? 共有 rowCount()?行 5.7.4 使用exec()方法執(zhí)行增、刪、改命令exec(update lyb set content=用PDO修改記錄 where author=蓉蓉); ?共有 行記錄被修改 5.7.5 使用prepare()方法執(zhí)行預(yù)處理語句預(yù)處理語句的作用是:編譯一次,可以多次執(zhí)行 優(yōu)點(diǎn):在執(zhí)行重復(fù)的單個(gè)查詢時(shí)快于直接使用query()或exec()方法可以有效防止SQL注入(因?yàn)镾QL語句是固定的,不需接受用戶輸入的參數(shù)值) 執(zhí)行

41、預(yù)處理語句的過程 (1)在SQL語句中添加占位符,PDO支持兩種占位符:即問號(hào)占位符和命名參數(shù)占位符 $sql=insert into lyb(title,content,author) values(?,?,?);/?號(hào)占位符$sql=insert into lyb(title,content,author) values(:title,:content,:author); (2)使用prepare()方法準(zhǔn)備執(zhí)行預(yù)處理語句 $stmt=$db-prepare($sql); (3)綁定參數(shù)$stmt-execute(); 示例例5.3使用預(yù)處理語句插入記錄的示例程序 例5.4 使用預(yù)處理語句

42、根據(jù)關(guān)鍵詞查詢的示例程序5.8 用PDO制作留言板實(shí)例顯示留言的代碼query(select * from lyb order by ID desc);echo 共有.$result-rowCount().條留言;?rowCount()0) while($row=$result-fetch(1)?img src=images/.gif style=float:left;/作者: 內(nèi)容: ? else echo 目前還沒有用戶留言;?驗(yàn)證用戶登錄的主要代碼 query($sql);if ($result-rowCount()=0) /如果數(shù)據(jù)表中查不到對(duì)應(yīng)的記錄unset($_SESSIONadmin);echo alert(您輸入的用戶名或密碼不正確!);history.go(-1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論