PHP命名空间class中pdo报错

pdo是php系统自带的类,一般我们会自己封装数据库操作,如果封装的class类中间使用了pdo且使用了namespac命名空间,在调用的时候会直接在该命名空间下查找pdo类,显然是查不到的。这时候基本会报错 找不到xxxx\PDO class类

方法一

在你声明命名空间namespace xxx下使用如下语句将pdo类引入当前命名空间,以下code仅做示范,不代表可用。

<?php
namespace xxx;//你声明的命名空间
use PDO;
use PDOException;//如果有使用报错捕获,还需增加这行
class db
{
    function __construct($sql)
  {
    $dsn="mysql:host=127.0.0.1;port=3306;dbname=ranjuandb";
    $user='sa';
    $pass='123456';
   $dbh = new PDO($dsn,$user,$pass);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   return $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
}

方法二

在使用pdo类的时候前面加上斜杠“\”,pdo位于php的脚本根目录路径?

<?php
namespace xxx;//你声明的命名空间
//use PDO;// 在pdo前面加斜杠的话这里就可以不使用use PDO
class db
{
    function __construct($sql)
  {
    $dsn="mysql:host=127.0.0.1;port=3306;dbname=ranjuandb";
    $user='sa';
    $pass='123456';
   $dbh = new \PDO($dsn,$user,$pass);//加上斜杠
    $dbh->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);//加上斜杠
   return $dbh->query($sql)->fetchAll(\PDO::FETCH_ASSOC);//加上斜杠
}
}

另外需要注意的是如果class类里面有使用try{……}catch(PDOException $e){ ……}这种代码的也要引入use PDOException;或在 PDOException 前加斜杠!

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/pdo-namespace-error/

赞赏

微信赞赏支付宝赞赏

发表评论