【问题标题】:Strict Standards: Declaration should be compatible with PDO statement严格标准:声明应与PDO声明兼容
【发布时间】:2016-11-07 11:35:15
【问题描述】:

我正在尝试运行其他团队开发的代码。我配置并运行项目,但我收到以下错误,这对我来说是新的。

严格标准:DB_Statement_1::execute() 的声明应该是 与 PDOStatement::execute($bound_input_params = NULL) 兼容 /virtualhosts/libolution/DB/Statement.1.php 第 12 行

严格标准:DB_Statement_1::fetch() 的声明应该与 PDOStatement::fetch($how = NULL, $orientation = NULL, $offset = NULL) 在 /virtualhosts/libolution/DB/Statement.1.php 上线 12

第 12 行如下。

/**
 * A statement class that implements DB_IStatement_1
 * NOTE: in most cases, you should be type-hinting for DB_IStatement_1
 * @author Andrew Minerd <andrew.minerd@sellingsource.com>
 */ 
   following line is #12
  class DB_Statement_1 extends PDOStatement implements DB_IStatement_1
{   public function execute(array $args = NULL)
    {
        // apparently, PDO counts the number of arguments to indicate missing
        // optional parameters, rather than relying on a default value
        $result = ($args !== NULL)
            ? parent::execute($args)
            : parent::execute();

        if ($result === FALSE)
        {
            throw new PDOException('Could not execute statement');
        }
        return $result;
    }

    /**
     * Fetches a single row
     *
     * @param int $fetch_mode
     * @return mixed
     */
    public function fetch($fetch_mode = DB_IStatement_1::FETCH_ASSOC)
    {
        return parent::fetch($fetch_mode);
    }

同一个包中有以下类。

DatabaseConfigPool.1.php  MSSQLAdapter.1.php           MySQL4Adapter.1.php           ODBCConfig.1.php              TransactionAbortedException.1.php
EmulatedPrepare.1.php     MSSQLAdapterException.1.php  MySQL4AdapterException.1.php  PoolConfig.1.php              TransactionManager.1.php
FailoverConfig.1.php      MSSQLConfig.1.php            MySQL4StatementAdapter.1.php  Profiler                      Util
IConnection.1.php         MSSQLConfig.2.php            MySQLConfig.1.php             Query.1.php                   Util.1.php
IDatabaseConfig.1.php     MSSQLStatementAdapter.1.php  MySQLiAdapter.1.php           SQLiteConfig.1.php
IStatement.1.php          MultiplexConfig.1.php        MySQLiAdapterException.1.php  Statement.1.php
[vendorapi@808680-app2 DB]$ nano Statement.1.php

所以其中哪一个被覆盖了。

谢谢大家

【问题讨论】:

  • 在 PDO 之上构建了一个 DB 包装器? 0_o
  • 即您的方法签名必须与您覆盖的方法签名相匹配。
  • 但是DB包中没有DB_IStatement_1接口或类
  • 看起来像一个非常糟糕的包。
  • 我已经提到了同一个包中的所有类。

标签: php mysql pdo zend-framework2


【解决方案1】:

这可能是由于 PHP 版本的升级,以及 PHP 在 PHP 5.4+ 中处理不同错误的方式

首先,您可以禁用严格错误以消除此错误,如下所示:

error_reporting(E_ALL ^ E_STRICT);

注意 E_STRICT - 这是 PHP 5.4+ 的新内容

但是,如果您想保留严格的错误,您可以通过更改代码来消除它们。您需要确保覆盖的类具有正确的原型/定义以消除错误。

案例 1)

class DB_Statement_1 extends PDOStatement implements DB_IStatement_1
{   
    public function execute($args = NULL) { ... }

    ....
}

删除“数组”类型提示,因为父类没有,这应该可以消除第一个错误等。

【讨论】:

  • 谢谢我按照你的说法更改了代码,Ist ​​警告消失了,但实际问题是我得到“无法连接到数据库”。这是一个关键问题。
  • 但这与您在问题中所说的完全不同-这两个错误与连接到数据库无关..
猜你喜欢
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
相关资源
最近更新 更多