PDO抛出错误未定义的变量:pdo in

时间:2016-07-12 15:34:26

标签: php mysql pdo undefined

我有3个文件:dbconnect(这里是$ pdo的声明),core.php(带有要管理的类的文件)和test.php。 我想从DB接收数据,但我有错误: 注意:未定义的变量:第24行的C:\ xampp \ htdocs \ project \ core.php中的pdo

在dbconnect中,$ pdo在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;





?>

任何人都可以解决这个问题?感谢。

2 个答案:

答案 0 :(得分: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实例 - &gt; getPdo():      - 实现新的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;

答案 1 :(得分:0)

您需要将$ pdo作为输入传递给getLinks()函数,以使其可供使用。你可以试试getLinks($ pdo)