找不到PDO命名空间,同时正确执行

时间:2015-01-14 21:23:29

标签: php pdo

所以命名空间和PDO,凭借我现在拥有的经验,我认为它是地狱。

Warning: include_once(C:/xampp2/htdocs\application\classes\class.pdo.php): failed to open stream: No such file or directory in C:\xampp2\htdocs\application\bootstrap.php on line 18

Warning: include_once(): Failed opening 'C:/xampp2/htdocs\application\classes\class.pdo.php' for inclusion (include_path='.;C:\xampp2\php\PEAR') in C:\xampp2\htdocs\application\bootstrap.php on line 18

Fatal error: Class 'C_Red\Storage\PDO' not found in C:\xampp2\htdocs\application\classes\class.database.php on line 13

如果我这样连接,怎么会发生这种情况:

public static function init()
    {
        global $_CONFIG;
        try
        {
            self::$conn = new \PDO('mysql:hostname=127.0.0.1;dbname=c_red,root,123',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        }
            catch(PDOException $e)
        {
            throw new PDOException ($e->getMessage);
        }
        date_default_timezone_set('Europe/Amsterdam');
    }

PDO前面\的工作不是设置它不在我正在使用的命名空间中吗?

这个错误怎么可能?

感谢。

1 个答案:

答案 0 :(得分:2)

它不仅仅是必须命名空间的new \PDO()构造函数,而且还引用了它的常量和异常。您稍后在构造函数中声明PDO属性,但不要用反斜杠命名它们:

// First fix the namespacing...
self::$conn = new \PDO('mysql:hostname=127.0.0.1;dbname=c_red,root,123',array(\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION));
//--------------------------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

因此,错误消息会引导您查看new PDO(),但PHP实际上是在同一行中抱怨PDO::ATTR_ERRMODE

同样适用于catch块:

 catch(\PDOException $e)
 {
     throw new \PDOException ($e->getMessage);
 }

第二:在用户名和密码之前,您在DSN字符串上缺少结束引号。构造函数应该完全像:

// user, password are 2nd, 3rd arguments to constructor!
self::$conn = new \PDO('mysql:hostname=127.0.0.1;dbname=c_red', 'root', '123', array(\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION));

...其中'root''123'是构造函数的单独参数,不是 DSN字符串的一部分。

关于在评论后使用the use keyword的注意事项:

您可以使用

将PDO导入名称空间
use \PDO;

这将允许您使用PDO及其常量,而不用反斜杠作为前缀。但是,必须use \PDOException,因为异常不在PDO命名空间内(没有这样的命名空间)。两者都存在于全局命名空间中,因此使用use导入它们可能无法获得太多收益。我的意见和偏好将继续为\PDO\PDOException添加前缀。