PDO

個人理解:數(shù)據(jù)庫有很多種简十,如mysql,oracle等,不同的數(shù)據(jù)庫有各自不同的函數(shù)哨毁,因此即使是實現(xiàn)同一個功能如插入數(shù)據(jù),我們也需要記住多個函數(shù)源武,這無疑是一個巨大的工作扼褪。所以,我們希望有一個工具能夠一個統(tǒng)一的方法來操作不同的數(shù)據(jù)庫粱栖,這樣话浇,我們就可以只了解這一個工具就可以操作多種不同的數(shù)據(jù)庫。Pdo就是這樣一種工具闹究。
有了pdo凳枝,我們不需要再為不同的數(shù)據(jù)庫封裝數(shù)據(jù)庫操作類,只需要使用pdo接口中的方法就可以對數(shù)據(jù)庫進(jìn)行操作跋核。在選擇不同的數(shù)據(jù)庫時岖瑰,只需要修改pdo中的dsn即可。在使用pdo之前砂代,我們首先要對配置文件進(jìn)行更改蹋订。

  1. 打開php。Ini文件
  2. 加載”extension=php_pdo.dll”
  3. 若想支持某個具體的數(shù)據(jù)庫還要加載相應(yīng)的數(shù)據(jù)庫選項刻伊。如露戒,要支持mysql數(shù)據(jù)庫,則需要加載”extension=php_pdo_mysql.dll”選項.
    如圖:



    4.php捶箱。ini更改完后智什,保存并重啟MySQL即可。
    那么如何連接數(shù)據(jù)庫呢丁屎。
    原本荠锭,用MySQL數(shù)據(jù)庫中的函數(shù)是這樣的

$dbc=@mysqli_connect('127.0.0.1', 'root','123456','todolist') or die('could not connect to mysql');
 mysqli_set_charset($dbc,'utf8');

現(xiàn)在,用pdo數(shù)據(jù)庫抽象層進(jìn)行操作是這樣的

                $dbName='todolist';
                $user='root';
                $pass='123456';
                $host='localhost';
                $dsn="$dbms:host=$host;dbname=$dbName";
                try{
                  $pdo=new PDO($dsn,$user,$pass);
                  $pdo->query("set names utf8");
                  
                }catch(PDOException $e){
                  die("Error!:".$e->getMessage()."<br />");
                }

$dbms='mysql'; 定義數(shù)據(jù)庫的類型
$user='root';定義使用數(shù)據(jù)庫的用戶名
$pass='123456';定義密碼
$host='localhost';定義使用的主機(jī)名稱
$dsn="$dbms:host=$host;dbname=$dbName"DSN部分晨川,有三部分組成:pdo的鏈接的數(shù)據(jù)庫名稱证九,主機(jī)名稱和數(shù)據(jù)庫名稱;
$pdo=new PDO($dsn,$user,$pass);實例化對象
$pdo->query("set names utf8");設(shè)置編碼格式删豺,否則會導(dǎo)致讀取數(shù)據(jù)庫的中文內(nèi)容是會出現(xiàn)亂碼。
下面愧怜,我們以todolist中的register.php為例進(jìn)行講解呀页。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>注冊頁面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
    <body>
        <?php
        session_start();
        $dbc=@mysqli_connect('127.0.0.1', 'root','123456','todolist') 
            or die('could not connect to mysql');
            mysqli_set_charset($dbc,'utf8');
            require('D:\Dev Apps\xampp\htdocs\sunyan2015\mysqli_connecttodolist.php');
            $error=array();
            if($_SERVER['REQUEST_METHOD']=='POST'){
            if(!empty($_POST['username'])){
                $username=$_POST['username'];
            }else{
                $error[]="請輸入用戶名";
            }
            if(!empty($_POST['password'])){
                $password=$_POST['password'];
            }else{
                $error[]="請輸入密碼";
            }
            if(empty($error)){
                $q1="select user_id from usermessage where name='$username' ";
                $r1=mysqli_query($dbc,$q1);
                if(mysqli_num_rows($r1)==0){
                    $q="insert into usermessage(name,password)values(\"$username\",\"$password\")";
                    $r=mysqli_query($dbc,$q);
                    if($r){
                        echo'恭喜你,已注冊成功拥坛。請點(diǎn)擊<a href="login.php">登錄</a>';
                    }else{//$r
                        echo'You could not be registered due to a system error.';
                    }
                }else{
                    echo'對不起蓬蝶,此用戶名已經(jīng)注冊';
                }
                mysqli_close($dbc); 
                exit();
            }else{//empty
                echo'<h2> Error!</h2>';
               echo'The following error(s) occurred:</br>';
                foreach($error as $msg){
                    echo"$msg";
                    echo"<br />";
                    }
                echo'<p>Please try again.</p>';
                }
            }
        
        ?>
        <form action="register.php" method="POST"> 
            用戶名:<br />
            <input type="text" name="username" />
            <br />
            密碼:<br />
            <input type="password" name="password" />
            請由字母數(shù)字或下劃線組成,長度為5-21
            <br />
            <input type="submit" value="注冊" />
        </form>
         <a href="login.php">登錄</a>
         <br />
        <a href="changepassword.php">更改密碼</a>
        <br />
         <a href="index.php">返回首頁</a>
    </body>
</html>

應(yīng)用pdo

  <?php
        session_start();
        include("../config.php");
        $smarty->assign('title','注冊頁面');
         echo'<form action="register.php" method="POST"> 
            用戶名:<br />
            <input type="text" name="username" />
            <br />
            密碼:<br />
            <input type="password" name="password" />
            <br />
            <input type="submit" value="注冊" />
        </form>';
            $error=array();
            if($_SERVER['REQUEST_METHOD']=='POST'){
            if(!empty($_POST['username'])){
                $username=$_POST['username'];
            }else{
                $error[]="請輸入用戶名";
            }
            if(!empty($_POST['password'])){
                $password=$_POST['password'];
            }else{
                $error[]="請輸入密碼";
            }
            if(empty($error)){
                $dbms='mysql';
                $dbName='todolist';
                $user='root';
                $pass='123456';
                $host='localhost';
                $dsn="$dbms:host=$host;dbname=$dbName";
                try{
                  $pdo=new PDO($dsn,$user,$pass);
                  $pdo->query("set names utf8");
                  $q1="select user_id from usermessage where name='$username'";
                  $q="insert into usermessage(name,password)values(\"$username\",\"$password\")";
                  $r1=$pdo->query($q1);
                  if(!empty($r1)){
                    $r=$pdo->exec($q); 
                    if($r){
                        echo'恭喜你猜惋,已注冊成功丸氛。請點(diǎn)擊<a href="login.php">登錄</a>';
                    }else{
                        echo'You could not be registered due to a system error.';
                    }
                }else{
                    echo'對不起,此用戶名已經(jīng)注冊';
                    }                  
                }catch(PDOException $e){
                  die("Error!:".$e->getMessage()."<br />");
                }
            }else{
                echo'<h2> Error!</h2>';
               echo'The following error(s) occurred:</br>';
                foreach($error as $msg){
                    echo"$msg";
                    echo"<br />";
                    }
                echo'<p>Please try again.</p>';
                }
            }
            $smarty->assign('name1','login');
    $smarty->assign('content1','登錄');
    $smarty->assign('name2','changepassword');
    $smarty->assign('content2','更改密碼');
    $smarty->display('todo.html');
        
        ?>       

從以上兩段代碼惨奕,我們可以開出
總體思路是不變的雪位。變的只是數(shù)據(jù)庫的鏈接部分和各種驗證條件的位置。
通過上述代碼梨撞,我們再來了解一下dpo是如何執(zhí)行sql語句的雹洗。

  1. 對于insert,delete,update,用exec方法
$q="insert into usermessage(name,password)values(\"$username\",\"$password\")";
$r=$pdo->exec($q);

Exec方法返回執(zhí)行后受影響的行數(shù)。

  1. 對于insert卧波,用query方法
   $q1="select user_id from usermessage where name='$username' ";
$r1=$pdo->query($q1);

Query方法返回一個結(jié)果集时肿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市港粱,隨后出現(xiàn)的幾起案子螃成,更是在濱河造成了極大的恐慌,老刑警劉巖查坪,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寸宏,死亡現(xiàn)場離奇詭異,居然都是意外死亡偿曙,警方通過查閱死者的電腦和手機(jī)氮凝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來望忆,“玉大人罩阵,你說我怎么就攤上這事∑羯悖” “怎么了稿壁?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歉备。 經(jīng)常有香客問我傅是,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任落午,我火速辦了婚禮谎懦,結(jié)果婚禮上肚豺,老公的妹妹穿的比我還像新娘溃斋。我一直安慰自己,他們只是感情好吸申,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布梗劫。 她就那樣靜靜地躺著,像睡著了一般截碴。 火紅的嫁衣襯著肌膚如雪梳侨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天日丹,我揣著相機(jī)與錄音走哺,去河邊找鬼。 笑死哲虾,一個胖子當(dāng)著我的面吹牛丙躏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播束凑,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼晒旅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汪诉?” 一聲冷哼從身側(cè)響起废恋,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扒寄,沒想到半個月后鱼鼓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡该编,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年迄本,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片上渴。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡岸梨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稠氮,到底是詐尸還是另有隱情曹阔,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布隔披,位于F島的核電站赃份,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抓韩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一纠永、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谒拴,春花似錦尝江、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苍日,卻和暖如春惭聂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背相恃。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工辜纲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拦耐。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓耕腾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親揩魂。 傳聞我的和親對象是個殘疾皇子幽邓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • pdo類PDO是一個“數(shù)據(jù)庫訪問抽象層”,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口火脉,與mysql和mysqli的函數(shù)庫相比牵舵,...
    桖辶殤閱讀 874評論 0 0
  • pdo基本使用 【PDO是啥】 PDO是PHP 5新加入的一個重大功能,因為在PHP 5以前的php4/php3都...
    桖辶殤閱讀 1,342評論 0 4
  • 一倦挂、 PDO類的構(gòu)造方法: -------------------------------------------...
    liudai123閱讀 467評論 0 0
  • PDO錯誤處理 為適合你的應(yīng)用開發(fā)畸颅,PDO 提供了3中不同的錯誤處理策略。 PDO 使用基于SQL-92 SQLS...
    桖辶殤閱讀 1,087評論 0 0
  • 本文簡單介紹PDO對象下各個函數(shù)的使用方法方援。 事先聲明:本文不詳盡没炒,見具體請前往PHP手冊參閱。 安裝PDO PD...
    CommandM閱讀 2,665評論 0 4