Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 调用未定义的方法DB::prepare()_Php_Mysql_Pdo - Fatal编程技术网

Php 调用未定义的方法DB::prepare()

Php 调用未定义的方法DB::prepare(),php,mysql,pdo,Php,Mysql,Pdo,我使用PDO语句从DB获取详细信息,下面是我使用的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 =

我使用PDO语句从DB获取详细信息,下面是我使用的
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;
    }
    }

调用未定义的方法DB::prepare()时出现错误。请帮我解决这个问题,因为它在本地工作没有任何问题,当我上传到live server时,我收到了这些错误。调用静态包装的目的是什么?您已经有了一个返回数据库对象的factory设置,该对象已经为您提供了具体的方法,导致如下调用:

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

您正在运行什么版本的PHP<代码>\uuu callStatic已添加到5.3.0.on服务器中。。PHP版本是5。。有办法吗?升级到非史前版本。5.3.0是5年前推出的。它是5.2.17版本,在serverOK上,这实际上不是史前版本,因为它是在5.3.0发布18个月后推出的。但是如果你想使用这个功能,你需要使用一个有这个功能的PHP版本。他试图通过自动将方法转发到实例来避免一直写
DB::instance()
DB::instance
对我来说很有效。。不知道为什么?现在,如果我尝试执行
$data=DB::instance()->prepare($sql)->execute([$id])->fetchAll()
然后我得到了类似于
语法错误,意外的“[”,预期的“”
@CodeFreak,
[]
数组语法从5.4开始,如果我想,我不能在查询中使用
use@CodeFreak如果您使用的是旧版本,那么最好养成检查文档以了解何时添加了功能的习惯。
$data = DB::instance()->prepare($sql)->execute()->fetchAll();