PDO連接數(shù)據(jù)庫:
<?php /醫(yī)院 * PDO連接數(shù)據(jù)庫 */ //1.配置參數(shù) /* * 數(shù)據(jù)源:DSN * 基本格式:數(shù)據(jù)庫的類型:屬性=值... * mysql:host=127.0.0.1;dbname=php;charset=utf-8;port=3306 */ $pdo=new PDO('mysql:dbname=php','root','root');
點擊 "運行實例" 按鈕查看在線實例
PDO預(yù)處理添加操作:
<?php header("Content-type: text/html; charset=utf-8"); /醫(yī)院 * PDO預(yù)處理添加操作 * PDO的預(yù)處理使用的是PDOStatement對象 * $pdo->prepare()創(chuàng)建stmt對象 * sql語句中的占位符全部采用:命名占位符,不用? */ //1.連接數(shù)據(jù)庫 require 'pdo_connect.php'; //2.sql語句 INSERT user SET name =:name,email=:email,password=sha1(:password) $sql="INSERT `user` SET `user_name`=:user_name,`email`=:email,`password`=sha1(:password)"; //3.創(chuàng)建PDO預(yù)處理對象stmt $stmt=$pdo->prepare($sql); //4.要插入到數(shù)據(jù)庫里的數(shù)據(jù) data數(shù)組中的參數(shù)對應(yīng)$sql命名占位符 $data=['user_name'=>'張飛','email'=>'zf@qq.com','password'=>'333']; /* * 4.1綁定變量到預(yù)處理對象:SQL語句對象 * $stmt->bindParam(參數(shù),變量,類型) */ //$stmt->bindParam(':name',$data['user_name'],PDO::PARAM_STR); //$stmt->bindParam(':email',$data['email'],PDO::PARAM_STR); //$stmt->bindParam(':password',$data['password'],PDO::PARAM_STR); //5.執(zhí)行新增操作 if($stmt->execute($data)) { //成功會返回受影響的記錄數(shù):新增的記錄數(shù)量 echo '<h3>成功添加了'.$stmt->rowCount().'條記錄</h3>'; }else{ echo '<h3>添加失敗</h3>'; print_r($stmt->errorInfo()); die(); }
點擊 "運行實例" 按鈕查看在線實例
PDO預(yù)處理更新操作:
<?php header("Content-type: text/html; charset=utf-8"); /醫(yī)院 * PDO預(yù)處理更新操作 * PDO的預(yù)處理使用的是PDOStatement對象 * $pdo->prepare()創(chuàng)建stmt對象 * sql語句中的占位符全部采用:命名占位符,不用? */ //1.連接數(shù)據(jù)庫 require 'pdo_connect.php'; //2.sql語句 UPDATE user SET name =:name,email=:email,password=sha1(:password) $sql="UPDATE `user` SET `user_name`=:user_name,`email`=:email,`password`=sha1(:password) WHERE `user_id`=:user_id"; //3.創(chuàng)建PDO預(yù)處理對象stmt $stmt=$pdo->prepare($sql); //4.要更新的數(shù)據(jù) $data=['user_name'=>'孔明','email'=>'km@qq.com','password'=>'333','user_id'=>1]; /* * 4.1綁定變量到預(yù)處理對象:SQL語句對象 * $stmt->bindParam(參數(shù),變量,類型) */ //$stmt->bindParam(':name',$data['user_name'],PDO::PARAM_STR); //$stmt->bindParam(':email',$data['email'],PDO::PARAM_STR); //$stmt->bindParam(':password',$data['password'],PDO::PARAM_STR); //5.執(zhí)行操作 if($stmt->execute($data)) { //成功會返回受影響的記錄數(shù) echo '<h3>更新了'.$stmt->rowCount().'條記錄</h3>'; }else{ echo '<h3>更新失敗</h3>'; print_r($stmt->errorInfo()); die(); }
點擊 "運行實例" 按鈕查看在線實例
總結(jié):
在生成網(wǎng)頁時,許多PHP腳本通常都會執(zhí)行除參數(shù)之外,其他部分完全相同的查詢語句,針對這種重復(fù)執(zhí)行一個查詢,每次迭代使用不同的參數(shù)情況,PDO提供了一種名為預(yù)處理語句(prepared statement)的機制。它可以將整個SQL命令向數(shù)據(jù)庫服務(wù)器發(fā)送一次,以后只有參數(shù)發(fā)生變化,數(shù)據(jù)庫服務(wù)器只需對命令的結(jié)構(gòu)做一次分析就夠了,即編譯一次,可以多次執(zhí)行。會在服務(wù)器上緩存查詢的語句和執(zhí)行過程,而只在服務(wù)器和客戶端之間傳輸有變化的列值,以此來消除這些額外的開銷。這不僅大大減少了需要傳輸?shù)臄?shù)據(jù)量,還提高了命令的處理效率??梢杂行Х乐筍QL注入,在執(zhí)行單個查詢時快于直接使用query()或exec()的方法,速度快且安全
PDO對預(yù)處理語句的支持需要使用PDOStatement類對象,但該類的對象并不是通過NEW關(guān)鍵字實例化出來的,而是通過執(zhí)行PDO對象的prepare()方法,在數(shù)據(jù)庫服務(wù)器中準備好一個預(yù)處理的SQL語句后直接返回的。如果通過之前執(zhí)行PDO對象的query()方法返回的PDOStatement類對象,只代表的是一個結(jié)果集對象。而如果通過執(zhí)行PDO對象中的prepare()方法產(chǎn)生的PDOStatement類對象,則為一個查詢對象,能定義和執(zhí)行參數(shù)化的SQL命令
運行效果圖:
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號