ADUNIT000

使用PDO存取資料庫(讀取、查詢、修改、更新)

 

PHP存取資料庫的方式有很多

這篇要介紹的是,如何使用PDO查詢、修改、更新資料庫

在說明之前,先簡單介紹一下什麼是PDO?

 

PDO(PHP Data Objects)是一種PHP連接資料庫的使用方法

主要的好處可以避免發生SQL injection相關的問題

同時也優化了許多存取資料庫的性能

 

下面就直接說明如何使用PDO讀取、查詢、修改、更新資料庫內的資料

 

       //首先,先來定義資料庫相關存取資料

       $db_host = "localhost";

       $db_user = "root";

       $db_pass = "111111";

       $db_select = "pdo_test";

 

       //使用PDO存取資料庫時,需要將資料庫依下列格式撰寫,讓程式讀取資料庫

       $dbconnect = "mysql:host=".$db_host.";dbname=".$db_select;

       //建立使用PDO方式連線的物件,並放入指定的相關資料

       $dbgo = new PDO($dbconnect, $db_user, $db_pass);

       //建立查詢資料表的SQL語法

       $sql = "SELECT * FROM pdo_test";

       //執行並查詢,查詢後只回傳一個查詢結果的物件,必須使用fetc、fetcAll...等方式取得資料

       $result = $dbgo->query($sql);

       //取出第一筆資料,以此例來說就是最先存入資料庫的那一筆資料

       $row=$result->fetch();

       //抓出全部但是除了使用欄位名稱存成陣列之外,還會依照順序再另外存成一組陣列,結果如下

       $row=$result->fetchAll();

       //Array ( [0] => Array ( [pdo_id] => 1 [0] => 1 [pdo_name] => stanley [1] => stanley [pdo_mail] => stanley@domain.com [2] => stanley@domain.com [pdo_login] => 0 [3] => 0 )  )

 

       //加入FETCH_ASSOC,代表要將取出的資料已關聯性的方式存成陣列,同時也適用於各式抓取資料的方法(如上面提到的fetch),結果如下

       $row=$result->fetchAll(PDO::FETCH_ASSOC);

       //Array ( [0] => Array ( [pdo_id] => 1 [pdo_name] => stanley [pdo_mail] => stanley@domain.com [pdo_login] => 0 ) 

 

 

       //如果需要做的是執行SQL語法的工作(例如插入、更新、修改),則必須使用下面的方式執行SQL語法

       //首先下列這是要執行插入的語法

       $sql_insert = "INSERT INTO `pdo_test` (`pdo_id`, `pdo_name`, `pdo_mail`, `pdo_login`) VALUES (NULL, 'stanley', 'stanley@domain.com', '0')";

       //方法一:可直接使用exec的方法,把要執行的SQL語法放入exec函式內

       $dbgo->exec($sql_insert);

       //方法二:必須先將要執行的語法放入prepare函數中,等到需要執行的時候再使用execute的方法來執行

       $inserert_2 = $dbgo->prepare($sql_insert);

       $inserert_2->execute();

 

       最後大家看看自家的資料表是不是有資料被輸入或網頁正常顯示,就知道是不是成功了

       據說PHP6之後,PHP就會捨棄過去mysql_query的方式去存取資料表,但目前仍找不到資料出處

       (碎碎念:目前史丹利用PHP5.5版測試時,只要是使用mysql_query存取,就會出現警告訊息,因此很有可能是真的)

       所以大家還是先預先準備,學習PDO存取資料庫的方法

 

       如果覺得對你有幫助的話. 請幫小弟按個讚吧~

 

參考資料:

PDO說明

官方函數說明

 

其他相關文章:

MySql 基本語法(查詢、插入、更新)

SQL Injection 範例(登入範例)

MySQL 插入校能優化與測試

 

文章標籤
創作者介紹

史丹利愛碎念

newaurora 發表在 痞客邦 PIXNET 留言(3) 人氣()


留言列表 (3)

發表留言
  • q255156
  • good~不錯文章
  • 謝謝^^

    newaurora 於 2015/05/10 10:11 回覆

  • jini
  • 你好 我想請教關於MySQL在並行這部分的問題我有需要做甚麼去解決嗎 我現在架設一個網路訂房的系統 許多人同時在我的網站上下訂單 這樣會不會造成資料遺失或者其他並行的問題
    我主要想知道的是 是不是這部分並不需要我去對PHP存取資料庫的部分去做甚麼 如果是這樣 那MySQL又是怎麼樣去對並行的問題做處裡的 跟SQL Sever處理的方式
  • 很抱歉現在才來回覆~
    其實一個網站如果有多人同時下訂單的數量會造成資料遺失的問題其實要看你的量有多大,如果每分鐘有到1萬筆以上,發生機率才較會出現,同時跟你的系統架構也有關,從使用者端->AP端->DB端會經過很多關卡的考驗;如果單就DB的設計來討論的話,你可以做成Master-Slave的架構來進行讀寫分離,把所有讀資料的事情給Slave做,Master只負責寫入,其實就足以應負很大量的寫入工作,希望這樣有幫到你的忙。

    newaurora 於 2015/07/05 14:49 回覆

  • 寶
  • 可以請教一下為什麼寫不進去資料庫嗎?

    // data = "{\n \"userPassword\" : \"qwert\",\n \"userName\" : \"wwrrt\"\n}";
    我先對上面傳進來的檔案解析,取出帳號密碼。不知道寫法哪邊有錯才導致存不進去資料庫。

    $inputJson = $_POST['data'];
    $inputJson = str_replace('data=', '', $inputJson);
    $inputArray = json_decode($inputJson, true);
    $userName = $inputArray['userName'];
    $userPassword = $inputArray['userPassword'];

    $sql_insert = "INSERT INTO `member`(`userName`, `userPassword`) VALUES ('$userName', '$userPassword')";
    $insertInDB = $link->prepare($sql_insert);
    $insertInDB->execute();
找更多相關文章與討論