使用PHP和MySQL从数据库检索记录时出错

时间:2013-10-12 15:54:14

标签: php pdo

我是PHP的初学者。我正在尝试从数据库中获取数据,但我遇到以下错误 “致命错误:在第22行的C:\ xampp \ htdocs \ phpExamPrep \ studentDB.php中的非对象上调用成员函数query()” 对不起,我必须包含所有代码,它只是为了帮助你帮助我。谢谢 我有以下课程

class database 
{
    private static $dsn = 'mysql:local=localhost;dbname=test1';
    private static $username ='me';
    private static $password ='me';
    public static $db;

    private function __construct() 
    {

    }

    public static function  dataConnect()
    {
        if(isset(self::$db))
        {
           try
           {
               self::$db = new PDO(self::$dsn, self::$username, self::$password);

           }
           catch(PDOException $e)
           {
                $error_message = $e->getMessage();
                include 'database_error.php';
                exit();
           }
        }
           return self::$db;
      }
   }


   class studentDB 
   {


       public static function getAllRecords()
       {
           require  'database.php';
           $query = 'select * from student';

           $db = database::dataConnect();
           $result = $db->query($query); //This part is giving error
           $students = array();

           foreach($result as $row)
           {
              $stud = new student($row['firstname'],$row['lastname']);
              $stud->setID($row['id']);
              $students[]=$stud;
           }

              return $students;
        }
     }

    <?php
        include 'studentDB.php';
        $stx =studentDB::getAllRecords();

        foreach ($stx as $r)
        {
            echo $r->getFirstName().' '.$r->getLastName().' '.$r->getID();
        }
    ?>

when I changed if(isset(self::$db)) to if(!isset(self::$db)), the error becomes 

“警告:在第25行的C:\ xampp \ htdocs \ phpExamPrep \ studentDB.php中为foreach()提供的参数无效”

1 个答案:

答案 0 :(得分:1)

我想这个

if(isset(self::$db))

必须在

中更改
if ( ! isset(self::$db) )

因为你想设置self::$db,如果它没有设置而不是相反。

从您发布的代码片段中看起来就像是这个调用

$db = database::dataConnect();

返回对$db的空引用,因此您无法在空引用上调用query