在简单的php页面中无法多次使用自定义PDO类

时间:2014-12-16 01:18:14

标签: php mysql pdo

我编写了一个自定义的Database.class.php类,它封装了一个与MySQL数据库交互的PDO对象。

<?php

require_once('./classes/configs/Config.php');
class Database
{
    private static $instance = null; 

    private  function __construct()
    {}

    public static function getInstance()
    {
        if (self::$instance == null)
        {
            self::$instance = new PDO(
                "mysql:host=".Config::DB_HOST.";dbname=".Config::DB_NAME."", 
                Config::DB_USER, 
                Config::DB_PWD);

            return self::$instance; 
        }
    }
}
?>

我还编写了一个自定义UserDAO.class.php,它允许我更简单地执行CRUD操作。 例如,当我想在我的数据库中找到一个用户时,我会这样说:$userdao->find('tim')并存储我的 自定义user.class.php对象中的结果。 (这个类显然调用了一个静态的Database.class.php对象来使用 该类中的PDO对象)。 这是我的UserDAO.class.php中的find函数

public static function find($username)
    {
        $db = Database::getInstance();

        $pstmt = $db->prepare("SELECT * FROM users WHERE username = :x");
        $pstmt->execute(array(':x' => $username));

        $result = $pstmt->fetch(PDO::FETCH_OBJ);
        $p = new User();

        if ($result)
        {

            $p->setUser_id($result->user_id);
            $p->setUsername($result->username);
                        $p->setFirst_name($result->first_name);
                        $p->setLast_name($result->last_name);
                        $p->setEmail($result->email);
            $p->setRegistration_date($result->registration_date);
            $pstmt->closeCursor();
            return $p;
        }
        $pstmt->closeCursor();
        return null;
    }

问题是我似乎无法在一个简单的php页面上多次使用$userdao对象。

$userdao = new UserDAO();
$user5=$userdao->find('tim');
echo"<h3>".$user5."</h3>";  // this works fine (I have a toString function)
$user6=$userdao->find("john"); // this does not work....rest of the page is blank!!!!
echo"<h3>".$user6."</h3>";  

1 个答案:

答案 0 :(得分:1)

您在此处有错误 - 仅在self::$instance

时才会返回self::$instance == null
public static function getInstance() {
    if (self::$instance == null)
    {
        self::$instance = new PDO(
            "mysql:host=".Config::DB_HOST.";dbname=".Config::DB_NAME."", 
            Config::DB_USER, 
            Config::DB_PWD);
        // return self::$instance; // moved down

    }
    return self::$instance; // this is the fix
}

你也可以自己调试它rest of the page is blank!!!!"的原因,因为你已经禁用了错误报告。更改php.ini或使用error_reporting()显示PHP错误和警告

请参阅:

页面为空的原因是因为PHP正在抛出致命错误(您尝试在null上使用方法find),但是因为没有错误报告没有显示任何内容

没有错误报告就无法开发应用程序,您必须始终在开发环境中启用它