2016-01-21 76 views
0

我創建了一個函數來從我的數據庫中獲取數據。我希望這個函數可以重複使用,只需要爲不同的表放置正確的參數即可。下面是我做了什麼:在函數pdo中傳遞參數php

public function selectdata($table, $arguments='*', $where = null){ 
    if($this->isconnect){ 

     //check whether users put column names in the select clause 

     if(is_array($arguments)){ 

      $new_args = implode(',', $arguments); 
      $sql  = 'SELECT '.$new_args.' FROM '.$table; 

     } else { 

      $sql  = 'SELECT '.$arguments.' FROM '.$table; 

     } 

     //check whether users use the where clause 

     if($where != null && is_array($where)){ 

      $where = implode(' ', $where); 
      $sql .= ' WHERE '.$where ; 

     } 

     $query = $this->db->query($sql); 
     $query -> SetFetchMode(PDO::FETCH_NUM); 
     while($row = $query->fetch()){ 
      print_r($row); 
     } 


    } else { 
     echo 'failed, moron'; 
    } 
} 

這是運行函數的方式:

$columnname = array('bookname'); 
$where  = array('bookid','=','2'); 
echo $database-> selectdata('buku', $columnname, $where); 

的代碼做得很體面,到目前爲止,但我不知道我要怎麼使用$where但在功能中沒有$columnname。我如何傳遞函數中的參數?

你能指點我更好的方法來創建一個函數來使用PDO抓取數據嗎?

回答

0

只需使用一個PDO類可以是這樣的:

<?php 
class DB_Connect{ 
    var $dbh; 
    function __construct(){ 
     $host = "xxx"; 
     $db = "xxx"; 
     $user = "xxx"; 
     $password = "xxx"; 
     $this -> dbh = $this -> db_connect($host, $db, $user, $password); 
    } 
    public function getDBConnection(){ 
     return $this -> dbh; 
    } 
    protected function db_connect($host, $db, $user, $password){ 
     //var_dump($host, $db, $user, $password);exit(); 
     try { 
      $dbh = new PDO("mysql:host=$host;dbname=$db", $user, $password); 
     } 
     catch(PDOException $err) { 
      echo "Error: ".$err->getMessage()."<br/>"; 
      die(); 
     } 
     return $dbh; 
    } 
    public function query($statement){ 
     $keyword = substr(strtoupper($statement), 0, strpos($statement, " ")); 
     $dbh = $this->getDBConnection();   
     if($dbh){ 
      try{ 
       $sql = $dbh->prepare($statement); 
       $exe = $sql->execute(); 
      } 
      catch(PDOException $err){ 
       return $err->getMessage(); 
      } 
      switch($keyword){ 
       case "SELECT":     
        $result = array(); 
        while($row = $sql->fetch(PDO::FETCH_ASSOC)){       
         $result[] = $row;      
        } 
        return $result;     
        break; 
       default: 
        return $exe; 
        break; 
      } 
     } 
     else{ 
      return false; 
     } 
    } 
} 
?> 

現在你可以包括類以及$dbh = new DB_Connect;創建一個對象,然後調用你只想與$dbh->query($statement) 參考每條語句這是我的最好的方式來做到這一點。

編輯:如果您想使用的語句在另一個數據庫,只需使用__construct($db)方法來傳遞對象創建

+0

有什麼'$ keyword'變量的函數你的數據庫的名字嗎? – januaryananda

+0

如果需要獲取結果,'$ keyword'變量將被分開!如果你從你的數據庫中選擇了一些東西,那麼你可以得到格式良好的數組,例如'$ array [「counter」] [「Field_Key」]''。 (「計數器」是你用'0'開始的結果數量) –

+0

@januaryananda是你想要的答案嗎? –