2015-02-18 29 views
10

Kategorilerin listesine ve içeriklerine erişmeye çalışıyorum. Kategoriler adlı bir dersim var. Bu hatayı almaya devam ediyorum. Garip olan şu ki, bu aynı kodu başka hiçbir yerde şu ana kadar hiç problemsiz kullanmıştım. Buradaki tek şey kodu yeniden kullanıp tüm değişkenleri değiştirdi. Aramaya çalışıyorum kod buradaÖnemli hata: null üye işlevini çağırmak null on

<?php 

class Category { 
    public function fetch_all() { 
     global $pdo; 

     $query = $pdo->prepare("SELECT * FROM dd_cat"); 
     $query->execute(); 

     return $query->fetchAll(); 
    } 

    public function fetch_data($cat_id) { 
     global $pdo; 

     $query = $pdo->prepare("SELECT * FROM dd_cat WHERE cat_id = ?"); 
     $query->bindValue(1, $cat_id); 
     $query->execute(); 

     return $query->fetch(); 
    } 
} 

?> 

Ve edilir: senin $pdo değişken initilazied değil gibi

<?php 
session_start(); 
//Add session_start to top of each page// 
require_once('includes/config.php'); 
require_once('includes/header.php'); 
include_once('includes/category.php'); 

?> 
<link rel="stylesheet" href="css/dd.css"> 
    <div id="menu"> 
     <a class="item" href="drop_index.php">Home</a> - 
     <a class="item" href="create_topic.php">Create a topic</a> - 
     <a class="item" href="create_cat.php">Create a category</a> 
     <div id="userbar"> 
<?php 
    if($user->is_logged_in()) 
    { 
     echo 'Hello ' . $_SESSION['user_name'] . '. Not you? <a href="logout.php">Sign out</a>'; 
    } 
    else 
    { 
     echo '<a href="login.php">Sign in</a> or <a href="index.php">create an account</a>.'; 
    } 
?> 
     </div> 
    </div> 

<?php 

$category = new Category; 
$categories = $category->fetch_all(); 

?> 
    <div id ="wrapper"> 
     <h1>Categories</h1> 
     <section> 
      <ul> 
       <?php foreach ($categories as $category) { ?> 
        <li><a href="category.php?id=<?php echo $category['cat_id']; ?>"> 
         <?php echo $category['cat_title']; ?></a> 
        </li> 
       <?php } ?> 
      </ul> 
     </section> 
    </div> 
<?php 
require_once('includes/footer.php'); 
?> 
+2

'var_dump ($ pdo)', '$ pdo',' ready' çağrıldığında bir nesne (henüz başlatılmamış) değil. – Jigar

+1

@JandenHale: Bundan önce bir "global" değişkeni "$ pdo" adıyla başlattın mı? –

+0

Sınıfta küresel, en azından öyle olduğunu düşündüm. – ddonche

cevap

22

görünüyor Burada

Fatal error: Call to a member function prepare() on null 

dersime koddur. Yüklediğiniz kodu yüklediğiniz yerde göremiyorum.

sınıf yöntemleri çağırmadan önce global scope yeni PDO nesnesi oluşturmak emin olun. (Kategori sınıfındaki yöntemleri nasıl etkilediğinden dolayı bunu global kapsamda belirtmelisiniz). Deneyebilirsin

$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

+0

İşte bu doğru, benim config dosyasında $ pdo yerine $ db var. Teşekkürler! – ddonche

0

/catch PDOException s (sizin yapılandırmaları farklı olabilir ama önemli bir parçası deneme/yakalama olduğunu): için,

try { 
     $dbh = new PDO(
      DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET, 
      DB_USER, 
      DB_PASS, 
      [ 
       PDO::ATTR_PERSISTENT   => true, 
       PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION, 
       PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . DB_CHARSET . ' COLLATE ' . DB_COLLATE 

      ] 
     ); 
    } catch (PDOException $e) { 
     echo 'ERROR!'; 
     print_r($e); 
    } 

print_r($e); satır size ihtiyacınız olan her şeyi gösterecektir Örnek: Hata mesajının unknown database 'my_db' gibi olduğu yeni bir durum vardı.

İlgili konular