2017-06-14 84 views
-1

我想獲取表上的數據並寫一個類。但是這個類不工作,因爲pdo不能訪問。我怎樣才能得到這個類的表數據?PHP PDO類在不同的類中使用(不起作用)

$db = new PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx"); 


class uye extends PDO{ 
    var $id; 
    var $kadi; 

    function cek($id){ 
     $query = $db->query("SELECT * FROM btc WHERE id='{$id}'", PDO::FETCH_ASSOC); 
     if ($query->rowCount()) { 
      foreach($query as $row){ 
       $this->id=$row["id"]; 
       $this->kadi=$row["kadi"]; 
      } 
     } 
    } 
} 


$bilgiler=new uye; 
$bilgiler->cek(1); 

echo $bilgiler->kadi; 
+0

您可以發佈您從 – Option

+0

調用此類的另一個文件嗎您在您的語句中也容易受到SQL注入的影響 – Option

+1

您準備做什麼?您的類擴展了PDO,但嘗試使用另一個PDO實例。你想做什麼? –

回答

0

所以我不知道在哪裏您取得$id我跑這一關獲取的所有數據。

我通常會將我的代碼分解爲文件和文件夾,因爲我發現這更容易與其他人合作。

// database connection file (dbc.php) 



class Database 
{ 
    private $host = "127.0.0.1"; 
    private $db = ""; 
    private $user = ""; 
    private $password = ""; 
    public $conn; 



    public function dbConnect() 
    { 
     $this->conn = null; 
     try 
     { 
      $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db, $this->user, $this->password); 
      $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } 
     catch (PDOException $exception) 
     { 
      echo "Connection error: " . $exception->getMessage(); 
     } 

     return $this->conn; 

    } 
} 

我然後做一個普通的文件,在這裏,您可以存儲所有常用的功能或你的靜態功能

// Common file (common.php) 


require_once('dbc.php'); 

class DBCommon 
{ 
    private $conn; 

    public function __construct() 
    { 
     $database = new Database(); 
     $db = $database->dbConnect(); 
     $this->conn = $db; 
    } 

    public function run($sql) 
    { 
     $stmt = $this->conn->prepare($sql); 
     return $stmt; 
    } 


} 

所以要更多地解釋這一點,你會看到一個功能的run()這僅僅是節省了繁瑣的$this->conn->prepare每個查詢。現在你可以運行$this->run()

下一個會是你的類文件..這是你的邏輯是:

// your class file... (class.btc.php) 


require_once "common.php"; 


class BTC extends DBCommon 

{ 
    public function getQuery() 
    { 
     $stmt = $this->run("SELECT * FROM `btc`"); 
     $stmt->execute(); 

     while ($row = $stmt->fetch(PDO::FETCH_OBJ)) 
     { 
      $rows[] = $row; 
     } 

     return $rows; 

    } 

} 

自我解釋..

然後你調用方法..比方說index.php

// File you're calling your class from (index.php) 


    require_once "class.btc.php"; 

    $fetch = new BTC(); 

    $returnData = $fetch->getQuery(); 


    foreach ($returnData as $data) 
    { 
     echo 
     "<p>$data->something</p> 
     <p>$data->somethingElse</p>"; 
    } 

這似乎有點長篇大論,我知道,但時間你會整體保存會幫助!

+0

感謝您的幫助。但這種方法很長。你知道最短的方法嗎? – Yunus

+0

相關:[報告PDO錯誤](https://phpdelusions.net/pdo#reporting_errors)和[捕捉PDO例外](https://phpdelusions.net/pdo#catch) –

+0

@Yunus,這是一個漫長的過程開始是的,但是,一個最初的文件被設置,它要快得多。 – Option