2011-04-07 44 views
0

所以我有一个数据库设置,我使用一个类来连接它,它扩展Mysqli。下面是代码中的相关行:Mysqli:__construct()返回NULL

class Db extends Mysqli { 
    public $result = Array(); 

    function __construct() { 
    parent::__construct(DB_HOST, DB_USER, DB_PASS, DB_DB); 
    } 

我检查的连接信息,并能正常工作与mysql_connect()功能。

我的PHP版本是5.3,我使用MAMP 1.9.5来运行环境。

因此,我遇到的问题 - 如果我连接var_dump(),它返回为NULL。不是假的,而是空的。现在我已经检查了规格,就像它的前身mysql_connect()一样,它应该在连接失败的情况下返回false。那么,什么样的情况会返回错误呢?

+2

“我检查过规范,就像它的前身mysql_connect(),它应该在连接失败的情况下返回false”真的吗? [The docs](http://www.php.net/manual/en/mysqli.connect.php)说:“仅OO语法:如果连接失败,对象仍然返回。要检查连接是否失败,请使用mysqli_connect_error()函数或mysqli-> connect_error属性,如前面的示例中所示。“ – Powerlord 2011-04-07 19:11:35

回答

2

您没有显示完整的代码。这就是你所做的:

class Db extends Mysqli { 
    function __construct() { 
     $r = parent::__construct(DB_HOST, DB_USER, DB_PASS, DB_DB); 
     var_dump($r); 
    } 
} 

自然这会返回NULL。父构造函数从不返回任何东西。建筑师不应该返回任何东西。他们填充新创建的对象实例。

您会在返回的对象中找到连接句柄和其他属性,之后构造函数完成。

0

我猜这是因为你的大写。扩展不存在的类Mysqli的作品,它的不存在的方法connect()仿佛回到NULL

class Db extends Mysqli 

应该

class Db extends mysqli 
+0

没有。 PHP语言结构和原始标识符不区分大小写。 (除非你使用自动加载器不理解语言语义的borked框架。) – mario 2011-04-07 19:25:21

0

@迈克尔是关于拼写问题可能正确,但这里还有另外一个问题:

你为什么不使用PDOPDO默认安装在PHP 5.1及更高版本上。

PDO提取数据库层,因此您可以针对任何支持PDO的数据库编写代码,而无需进行大的更改。