【问题标题】:Call to undefined method DB::prepare()调用未定义的方法 DB::prepare()
【发布时间】:2014-06-27 13:38:52
【问题描述】:

我正在使用 PDO 语句从数据库中获取详细信息,下面是我正在使用的 pdo

 <?php
    define('DB_HOST', 'localhost');
    define('DB_NAME', 's_ao');
    define('DB_USER', 'sd');
    define('DB_PASS', '****');
    define('DB_CHAR', 'utf8');

    class DB
    {
    protected static $instance = null;

    final private function __construct() {}
    final private function __clone() {}

    public static function instance()
    {
        if (self::$instance === null)
        {
            $opt  = array(
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES   => TRUE,
                PDO::ATTR_STATEMENT_CLASS    => array('myPDOStatement'),
            );
            $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
            self::$instance = new PDO($dsn, DB_USER, DB_PASS, $opt);
        }
        return self::$instance;
    }
    public static function __callStatic($method, $args) {
        return call_user_func_array(array(self::instance(), $method), $args);
    }
    }

    class myPDOStatement extends PDOStatement
    {
    function execute($data = array())
    {
        parent::execute($data);
        return $this;
    }
    }

现在当我使用

    $sid = $_GET['pmdfe23'];
    $sql = "SELECT * FROM checks WHERE id = '".$sid."'"; 
    //echo $sql;
    $data = DB::prepare($sql)->execute()->fetchAll();

我收到Call to undefined method DB::prepare() 的错误。请帮助解决这个问题,因为它在本地工作没有任何问题,当我上传到实时服务器时,我收到了这些错误。

【问题讨论】:

  • 您运行的是什么版本的 PHP? __callStatic 是在 5.3.0 中添加的。
  • 在服务器上.. PHP 版本是 5.. 有什么出路吗?
  • 升级到非史前的东西。 5.3.0 5 年前问世。
  • 服务器上的版本是 5.2.17
  • 好吧,这实际上不是史前的,因为它是在 5.3.0 之后 18 个月发布的。但是如果你想使用这个特性,你需要使用一个有它的PHP版本。

标签: php mysql pdo


【解决方案1】:

__callStatic 包装器的用途是什么?您已经有一个工厂设置来返回一个已经为您提供具体方法的数据库对象,从而导致如下调用:

$data = DB::instance()->prepare($sql)->execute()->fetchAll();

【讨论】:

  • 他试图通过自动将方法转发给实例来避免一直写DB::instance()
  • DB::instance 为我工作.. 不知道为什么?现在如果我尝试执行$data = DB::instance()-&gt;prepare($sql)-&gt;execute([$id])-&gt;fetchAll(); 那么我会得到类似syntax error, unexpected '[', expecting ')'的错误
  • @CodeFreak , [] 数组语法从 5.4 开始
  • 表示如果我想使用,我不能在查询中使用?
  • @CodeFreak 如果您使用旧版本,最好养成检查文档以了解何时添加功能的习惯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多