PHP程序設(shè)計課件 第6單元 PHP操作數(shù)據(jù)庫_第1頁
PHP程序設(shè)計課件 第6單元 PHP操作數(shù)據(jù)庫_第2頁
PHP程序設(shè)計課件 第6單元 PHP操作數(shù)據(jù)庫_第3頁
PHP程序設(shè)計課件 第6單元 PHP操作數(shù)據(jù)庫_第4頁
PHP程序設(shè)計課件 第6單元 PHP操作數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PHP操作數(shù)據(jù)庫第六單元知識目標了解數(shù)據(jù)庫的基本概念理解如何使用mysqli擴展與數(shù)據(jù)庫進行交互理解如何使用PDO擴展與數(shù)據(jù)庫進行交互理解如何使用預(yù)處理語句單元6PHP操作數(shù)據(jù)庫能力目標能夠根據(jù)應(yīng)用需求設(shè)計合理的數(shù)據(jù)庫結(jié)構(gòu)能夠使用PHP實現(xiàn)對數(shù)據(jù)庫的增刪改查操作能夠使用預(yù)處理語句防范SQL注入攻擊素質(zhì)目標培養(yǎng)學生數(shù)據(jù)安全意識培養(yǎng)學生自主的學習能力和獨立的思維方式記錄中華文明各個朝代及相互關(guān)系情景引入PHP操作數(shù)據(jù)庫結(jié)果頁面記錄中華文明各個朝代及相互關(guān)系本單元我們練習在MySQL數(shù)據(jù)庫中記錄中華文明各個朝代及相互關(guān)系,并利用PHP的數(shù)據(jù)庫操作功能制作展示頁面。Mysqli擴展訪問數(shù)據(jù)庫與解析結(jié)果集任務(wù)6.16.1.1配置mysqlimysqli擴展是mysql擴展的改進版,它采用面向?qū)ο蟮姆绞?,同時兼容面向過程的方式。mysqliMysgllSupportenabledClientAPilibraryversionmysqind7.429ActivePersistentLinks0InuctivePersistentLinks0ActiveLinks0查看mysqli擴展開啟情況mysqli擴展常用API6.1.2mysqli擴展常用API面向過程風格的函數(shù)面向?qū)ο箫L格的方法說明mysqli_connect()mysqli::__construct()建立MySQL數(shù)據(jù)庫連接。連接成功返回mysqli的實例,失敗返回falsemysqli_query()mysqli::query()執(zhí)行SQL語句。如果成功執(zhí)行select,show,describe或者explain語句將返回mysqli_result的實例,其他SQL語句將根據(jù)執(zhí)行結(jié)果,成功返回true,失敗返回falsemysqli_close()mysqli::close()釋放數(shù)連接。執(zhí)行結(jié)果成功返回true,失敗返回falsemysqli_prepare()mysqli::prepare()對SQL語句進行預(yù)處理。執(zhí)行成功返回mysqli_stmt的實例,失敗返回falsemysqli_fetch_row()mysqli_result::fetch_row()以索引數(shù)組返回mysqli_result中下一條沒有訪問的記錄mysqli_fetch_assoc()mysqli_result::fetch_assoc()以關(guān)聯(lián)數(shù)組返回mysqli_result中下一條沒有訪問的記錄mysqli_fetch_array()mysqli_result::fetch_array()以指定數(shù)組返回mysqli_result中下一條沒有訪問的記錄,可以是索引數(shù)組、關(guān)聯(lián)數(shù)組或者兩者混合mysqli_fetch_object()mysqli_result::fetch_object()以object返回mysqli_result中下一條沒有訪問的記錄mysqli_free_result()mysqli_result::free_result()釋放mysql_result占用的內(nèi)存mysqli_stmt_bind_param()mysqli_stmt::bind_param()mysqli_stmt實例中的占位符綁定值mysqli_stmt_execute()mysqli_stmt::execute()執(zhí)行預(yù)處理語句mysqli_stmt_get_result()mysqli_stmt::get_result()返回結(jié)果集4步分解mysqli擴展操作數(shù)據(jù)庫建立連接1執(zhí)行SQL語句2解析結(jié)果集3釋放資源46.1.3數(shù)據(jù)庫操作步驟 建立連接執(zhí)行SQL語句解析結(jié)果集釋放資源使用mysqli_connect()函數(shù)建立與MySQL數(shù)據(jù)庫的連接。該函數(shù)通常需要傳入4個參數(shù):數(shù)據(jù)庫域名或IP、數(shù)據(jù)庫用戶名、數(shù)據(jù)庫密碼和要訪問的數(shù)據(jù)庫名。通過mysqli_query()函數(shù)執(zhí)行SQL語句并發(fā)送到數(shù)據(jù)庫進行處理。該函數(shù)第一個參數(shù)是mysqli連接對象,第二個參數(shù)是需要執(zhí)行的SQL語句。函數(shù)的參數(shù)包括數(shù)據(jù)庫連接對象和要執(zhí)行的SQL語句。對于SELECT查詢,可以使用mysqli_result對象的方法(如fetch_assoc()、fetch_row()等)來獲取結(jié)果集中的數(shù)據(jù)。在操作過程中,要釋放mysqli對象和mysqli_result對象所占用的資源。6.1.4面向過程風格操作數(shù)據(jù)庫使用mysqli擴展,按照面向過程風格的方式操作數(shù)據(jù)庫。字段名類型約束說明dyna_idint主鍵、自增長朝代主鍵dyna_namevarchar(32)非空朝代名prev_dyna_idint

前朝主鍵6.1.4面向過程風格操作數(shù)據(jù)庫實現(xiàn)表的清空功能和記錄的添加功能.txt面向過程風格編程清空和添加記錄運行結(jié)果實現(xiàn)更新t_dynasty表中記錄的功能.txt面向過程風格編程更新記錄運行結(jié)果6.1.4面向過程風格操作數(shù)據(jù)庫實現(xiàn)從t_dynasty表中刪除記錄功能.txt面向過程風格編程刪除記錄運行結(jié)果6.1.5面向?qū)ο箫L格操作數(shù)據(jù)庫Dynasty的類.txtDynastyMapper的類.txt使用DynastyMapper類對朝代數(shù)據(jù)進行數(shù)據(jù)庫映射操作.txt6.1.6mysqli解析結(jié)果集函數(shù)名說明mysqli_fetch_row($result)函數(shù)從結(jié)果集$result中獲取一行數(shù)據(jù)并將其作為索引數(shù)組返回mysqli_fetch_assoc($result)函數(shù)從結(jié)果集$result中獲取一行數(shù)據(jù)并將其作為關(guān)聯(lián)數(shù)組返回。關(guān)聯(lián)數(shù)組的鍵名和查詢結(jié)果集的字段名相同mysqli_fetch_array($result,$mode)函數(shù)以$mode指定的格式從結(jié)果集$result中獲取一行數(shù)據(jù),$mode值可以是常量MYSQLI_BOTH混合格式(默認值),MYSQLI_NUM索引格式或者MYSQLI_ASSOC關(guān)聯(lián)格式mysqli_fetch_object($result,$class,$constructor_args)函數(shù)以對象的格式從結(jié)果集$result中獲取一行數(shù)據(jù)。對象的屬性名是字段名,對象的屬性值是字段值。$class參數(shù)可以指定用來實例化對象的類,默認是PHP提供的標準類stdClass。$constructor_args參數(shù)是傳遞給構(gòu)造方法的參數(shù),默認是空數(shù)組。mysqli_fetch_all($result,$mode)

函數(shù)以$mode指定的格式從結(jié)果集$result中獲取所有數(shù)據(jù),$mode值可以是常量MYSQLI_BOTH混合格式,MYSQLI_NUM索引格式(默認值)或者MYSQLI_ASSOC關(guān)聯(lián)格式6.1.6mysqli解析結(jié)果集mysqli_fetch_row()函數(shù)的使用.txtmysqli_fetch_object()函數(shù)的使用.txtmysqli_fetch_row函數(shù)解析結(jié)果集運行結(jié)果mysqli_fetch_object函數(shù)解析結(jié)果集運行結(jié)果6.1.6mysqli解析結(jié)果集mysqli_fetch_all()函數(shù)的使用.txtmysqli_fetch_all函數(shù)解析結(jié)果集運行結(jié)果PDO擴展訪問數(shù)據(jù)庫任務(wù)6.26.2.1配置PDO PDO是PHP數(shù)據(jù)對象(PHPDataObject)的簡稱,是PHP定義的一套數(shù)據(jù)庫訪問標準接口。PDOpoosuppertehebledpoodrhersmysqlpgsg',sqitepdo_mysqlPDODriverforySQLehebledCllentAPiwertionmyegind7.4.33DrectivaLoenlWaWasterValuspdo._.myscl.detault.socloet/tmp/mysgl.sock/tme/rysgl.sock6.2.2PDO擴展常用API方法名說明__construct()構(gòu)造方法,創(chuàng)建PDO實例beginTransaction()啟動事務(wù)commit()提交事務(wù)exec()執(zhí)行一條SQL語句,并返回受影響的行數(shù)lastInsertId()返回最后插入記錄的idprepare()根據(jù)SQL語句創(chuàng)建PDOStatement實例query()執(zhí)行一條SQL語句,并將查詢結(jié)果封裝到PDOStatement對象中返回rollBack()回滾事務(wù)PDO類的常用方法常量說明PDO::FETCH_BOTH根據(jù)下一條記錄返回一個關(guān)聯(lián)數(shù)組和索引數(shù)組的混合數(shù)組,其中關(guān)聯(lián)數(shù)組的鍵名是結(jié)果集的字段名PDO::FETCH_NUM根據(jù)下一條記錄返回一個索引數(shù)組PDO::FETTCH_ASSOC根據(jù)下一條記錄返回一個關(guān)聯(lián)數(shù)組,其中關(guān)聯(lián)數(shù)組的鍵名是結(jié)果集的字段名PDO::FETCH_OBJ根據(jù)下一條記錄返回一個對象,對象的屬性是字段名,屬性值是字段值,對象類型是stdClassPDO::FETCH_CLASS根據(jù)下一條記錄新建一個指定類的實例并返回PDO::FETCH_LAZY根據(jù)下一條記錄返回一個PDORow類型的實例,PDORow實例同時支持索引訪問記錄和字段名訪問記錄PDO設(shè)置解析結(jié)果格式的常量6.2.2PDO擴展常用API方法名說明fetch()解析結(jié)果集中的一條記錄,返回的格式由解析格式設(shè)置決定,沒有未解析的記錄則返回falsefetchAll()解析整個結(jié)果集,返回包含所有記錄的數(shù)組fetchColumn()解析結(jié)果集中一條記錄的指定列,沒有未解析的記錄則返回falsePDOStatement類的常用方法6.2.3PDO擴展操作數(shù)據(jù)庫__construct(string$dsn,string$username,string$password,array$driver_options)構(gòu)造方法結(jié)構(gòu)使用PDO擴展對數(shù)據(jù)庫demo中t_dynasty表的數(shù)據(jù)進行清空、添加、修改和刪除操作.txtPDO操作數(shù)據(jù)庫的流程和mysqli一致,包括建立連接、執(zhí)行SQL語句、解析結(jié)果集和釋放資源。6.2.4PDO解析結(jié)果集1.fetch()方法2.2.fetch_all()方法PDOStatement類中常見的解析結(jié)果集的方法:PDOStatement實例使用fetch()方法解析結(jié)果集.txtPDOStatement實例使用fetchAll()方法解析結(jié)果集.txt預(yù)處理語句任務(wù)6.36.3.1預(yù)處理語句簡介$dyna_id=$_GET['dyna_id']??0;$sql="select*fromt_dynastywheredyna_id=$dyna_id";預(yù)處理語句占用更少的資源,運行更快。1提供給預(yù)處理語句的參數(shù)不需要用引號括起來,驅(qū)動程序會自動處理。2如果程序只使用預(yù)處理語句,可以避免發(fā)生SQL注入。3預(yù)處理語句具有的優(yōu)點6.3.2mysqli擴展中使用預(yù)處理語句mysqli擴展執(zhí)行SQL語句時使用預(yù)處理語句的步驟主要如下:1.生成mysqli_stmt實例2.為mysqli_stmt實例的占位符綁定值3.執(zhí)行mysqli_stmt實例4.處理結(jié)果集函數(shù)名說明mysqli_prepare($link,$query)該函數(shù)用于準備一個預(yù)處理語句,并返回一個mysqli_stmt實例。參數(shù)$link是數(shù)據(jù)庫連接實例,參數(shù)$query是要執(zhí)行的SQL查詢語句mysqli_stmt_bind_param($stmt,$types,...&$vars)該函數(shù)用于綁定預(yù)處理語句中的參數(shù)。參數(shù)$stmt是mysqli_stmt實例,參數(shù)$types是占位符對應(yīng)的數(shù)據(jù)類型("i"表示整數(shù),"d"表示小數(shù),"s"表示字符型,"b"表示blob二進制大對象),參數(shù)$vars是占位符對應(yīng)的變量mysqli_stmt_execute($stmt)該函數(shù)用于執(zhí)行準備好的預(yù)處理語句。參數(shù)$stmt是mysqli_stmt實例mysqli_stmt_get_result($stmt)該函數(shù)用于返回一個mysqli_result實例。參數(shù)$stmt是mysqli_stmt實例mysqli_stmt_bind_result($stmt,...&$vars)該函數(shù)用于綁定結(jié)果集的列值到變量。參數(shù)$stmt是mysqli_stmt實例,參數(shù)$vars是接收查詢結(jié)果的對應(yīng)變量mysqli_stmt_fetch($stmt)該函數(shù)用于從準備好的語句中獲取下一行結(jié)果。參數(shù)$stmt是mysqli_stmt實例mysqli擴展預(yù)處理語句常用函數(shù)6.3.2mysqli擴展中使用預(yù)處理語句通過mysqli擴展使用預(yù)處理語句操作數(shù)據(jù)庫.txtfunctionupdate_dynasty($dyna_id,$dyna_name,$prev_dyna_id){......$sql="updatet_dynastysetdyna_name=?,prev_dyna_id=?wheredyna_id=?;";......mysqli_stmt_bind_param($ps,"sii",$dyna_name,$prev_dyna_id,$dyna_id);......}使用多種形式的占位符1使用占位符序號賦值2使用占位符名賦值3使用數(shù)組傳遞參數(shù)46.3.3PDO擴展中使用預(yù)處理語句在PDO擴展中,使用預(yù)處理語句相比mysqli擴展提供了更靈活的操作方式,主要體現(xiàn)在以下幾個方面:方法名說明PDO::prepare($query)該方法用于準備一個預(yù)處理語句,并返回一個PDOStatement對象。參數(shù)$query是要執(zhí)行的SQL語句PDOStatement::bindParam($parameter,&$variable)該方法用于綁定預(yù)處理語句中的參數(shù)。參數(shù)$parameter是占位符名或者占位符的序號,參數(shù)$variable是占位符需要綁定的變量,該參數(shù)是引用傳值PDOStatement::bindValue($parameter,$variable)該方法用于綁定預(yù)處理語句中的參數(shù)。參數(shù)$parameter是占位符名或者占位符的序號,參數(shù)$variable是占位符需要綁定的變量,該參數(shù)是賦值傳值PDOStatement::exec

溫馨提示

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

評論

0/150

提交評論