我编写了一个自定义的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>";
答案 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
),但是因为没有错误报告没有显示任何内容
没有错误报告就无法开发应用程序,您必须始终在开发环境中启用它