Php 正确执行时未找到PDO命名空间

Php 正确执行时未找到PDO命名空间,php,pdo,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 '

所以名称空间和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前面的
\
的任务不是设置它不在我工作的名称空间中吗

这个错误怎么可能


谢谢。

它不仅是必须命名的
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));
//--------------------------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
因此,错误消息会引导您查找
newpdo()
,但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字符串的一部分

关于在注释后使用的注意事项:

您可以使用

use \PDO;

这将允许您使用
PDO
及其常量,而无需在它们前面加反斜杠。但是,您还必须
使用\PDOException
,因为异常不在
PDO
命名空间内(没有这样的命名空间)。两者都存在于全局名称空间中,因此使用
use
导入它们可能没有什么好处。我的意见和偏好是继续在它们前面加上
\PDO
\PDOException

前缀。我首先检查include声明中反斜杠/正斜杠的使用情况。我打赌$_CONFIG['database']['hostname']不能适应系统应该使用的斜杠在文件的顶部?(作为一个对名称空间相当陌生的人说话)这是不受欢迎的吗?@JesseKernaghan这确实是一个意见问题。对于全局名称空间(如PDO)中的某些内容,我通常不使用
。可以,但是
PDOException
还需要使用
use PDOException
声明。如果PDO有自己的名称空间,那么
使用它将非常方便,您还可以在其中访问异常。