2016-07-12 11 views
0

dbconnect($ pdoの宣言)、core.php(管理するクラスを持つファイル)、test.phpの3つのファイルがあります。 私がDBからデータを受信したいが、私はエラーがあります: 注意:未定義の変数:CにPDO:するDBConnect $のpdoではライン上の\ xamppの\ htdocsに\プロジェクト\のcore.phpの24PDOスローエラー未定義変数:pdo in

をされますtry catchで、これの前に私は次のように書いています:$ pdo = null(変数をアクセス可能にするため)ですが、動作しません。 dbconnect ---> core.php(ここでのエラー)---> test.php;

//dbconnect.php 
<?php 
$mysql_host = 'localhost'; 
$username = 'root'; 
$password = ''; 
$database = 'db'; 

$pdo = null; 
try { 
    $pdo = new PDO('mysql:host='.$mysql_host.';dbname='.$database.';charset=utf8', $username, $password); 
} 
catch(PDOException $e) { 
    echo 'Połączenie nie mogło zostać utworzone.<br />'; 
} 

?> 

    //core.php 
require_once('cms/dbconnect.php'); 
class getCore{ 
    public $link_allegro; 
    public $link_facebook; 


    function getLinks(){ 
$query= $pdo->query('SELECT `url` FROM `links` WHERE `title` = "facebook"'); 
$row = $query->fetch(); 
$this->link_facebook = $row["url"]; 

$query= $pdo->query('SELECT url FROM links WHERE title = "allegro"'); 
$row = $query->fetch(); 
$this->link_allegro = $row["url"]; 

$query->closeCursor(); 


    } 
} 

//test.php 

<?php 
require_once('core.php'); 
$tmp = new getCore; 
$tmp->getLinks(); 

echo $tmp->link_allegro; 
echo $tmp->link_facebook; 





?> 

誰でもこれを解決できますか?ありがとう。

+0

'$ pdo'変数は、あなたの' getLinks'メソッドのスコープにありません。パラメータとして渡すか、クラス属性を使用して – andrewsi

+0

2番目のアイデアでこれを行う方法を格納する必要がありますか? –

答えて

1

これはスコープの問題です。 $ pdoはgetCoreクラスには存在しません。 データベースアクセスを管理するDatabaseConnectクラスを作成できます。

あなたは、データベース接続のために、この基本的なクラスを使用することができます。

<?php 
    class DatabaseConnect { 

     private $mysql_host = 'localhost'; 
     private $username = 'root'; 
     private $password = ''; 
     private $database = 'db'; 

     private $pdo = null; 

     public function getPdo(){ 
       return $this->pdo; 
     } 

     public function __construct(){ 
       try { 
        $this->pdo = new PDO('mysql:host='.$mysql_host.';dbname='.$database.';charset=utf8', $username, $password); 
       } 
       catch(PDOException $e) { 
        echo 'Połączenie nie mogło zostać utworzone.<br />'; 
       } 
      } 

    } 
?> 

あなたはDatabaseConnectオブジェクトを呼び出すと、他のクラスであなたのPDOインスタンスを取得することができます - > getPdo(): - Instannciate新しいDatabaseConnect。 - クラスのmethofを持つPDOインスタンスを取得します。そのような

$databaseConnect = new DatabaseConnect(); 

    $pdo = $databaseConnect->getPdo(); 

あなたは、次のコード:

//core.php 
require_once('cms/dbconnect.php'); 
class getCore{ 
    public $link_allegro; 
    public $link_facebook; 


    function getLinks(){ 
      $databaseConnect = new DatabaseConnect(); 
      $pdo = $databaseConnect-getPdo(); 
      $query= $pdo->query('SELECT `url` FROM `links` WHERE `title` = "facebook"'); 
      $row = $query->fetch(); 
      $this->link_facebook = $row["url"]; 

      $query= $pdo->query('SELECT url FROM links WHERE title = "allegro"'); 
      $row = $query->fetch(); 
      $this->link_allegro = $row["url"]; 

      $query->closeCursor(); 
    } 
} 

//test.php 

<?php 
require_once('core.php'); 
$tmp = new getCore; 
$tmp->getLinks(); 

echo $tmp->link_allegro; 
echo $tmp->link_facebook; 
0

あなたが使用するためにそれを利用できるようにする入力としてにgetLinks()関数に$ PDOを渡す必要があります。 getLinks($ pdo)