2015-02-18 8 views
10

पर मैं श्रेणियों और उनकी सामग्री की सूची तक पहुंचने का प्रयास कर रहा हूं। मेरे पास श्रेणियों नामक एक वर्ग है। मुझे यह त्रुटि मिल रही है। अजीब चीज यह है कि मैंने अभी तक दो अन्य स्थानों में एक ही सटीक कोड का उपयोग नहीं किया है। मैंने जो कुछ किया वह कोड का पुन: उपयोग कर रहा था और सभी चर बदल गया था।घातक त्रुटि: किसी सदस्य फ़ंक्शन को कॉल करें() पर शून्य

<?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(); 
    } 
} 

?> 

और यहाँ कोड मैं फोन करने के लिए कोशिश कर रहा हूँ है::

<?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' एक वस्तु नहीं है (अभी तक प्रारंभ नहीं किया गया है) जब 'तैयार' कहा जाता है। – Jigar

+1

@JandenHale: क्या आपने पहले ($) pdo' नाम से एक (वैश्विक) चर प्रारंभ किया था? –

+0

कक्षा में यह वैश्विक है, कम से कम मैंने सोचा था कि यह था। – ddonche

उत्तर

22

ऐसा लगता है आपके $pdo चर की तरह initilazied नहीं है

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

यहाँ मेरी कक्षा में कोड है। मैं उस कोड में नहीं देख सकता जिसे आपने अपलोड किया है जहां आप इसे प्रारंभ कर रहे हैं।

क्लास विधियों को कॉल करने से पहले सुनिश्चित करें कि आप global scope में एक नई पीडीओ ऑब्जेक्ट बनाएं। (आपको श्रेणी वर्ग के अंदर विधियों को कैसे प्रभावित किया गया है इसके कारण आपको वैश्विक दायरे में घोषित करना चाहिए)।

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

+0

यह वही है, मेरे पास यह मेरी कॉन्फ़िगरेशन फ़ाइल में $ pdo के बजाय $ db के रूप में है। धन्यवाद! – ddonche

0

आप कोशिश कर सकते हैं/कैच PDOException रों (आपके कॉन्फ़िगरेशन अलग सकता है, लेकिन महत्वपूर्ण हिस्सा ट्राई/कैच है): के लिए,

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); लाइन तुम सब कुछ आप की जरूरत दिखाएगा उदाहरण के लिए मेरे पास एक हालिया मामला था जहां त्रुटि संदेश unknown database 'my_db' जैसा था।

संबंधित मुद्दे

 संबंधित मुद्दे