我正在尝试为 mysqli 编写一个包装类,基本上只是为了更好地处理错误,但是当我尝试运行网站上的任何页面时,我遇到了错误,而不仅仅是那些调用 mysqli 的页面。
这是我得到的错误:
PHP 警告:定价声明MySql::query($query(应该与第37行\classes\PricingMySql.php中的mysqli::query($query,$resultmode = NULL(兼容
这是 PricingMySql 的类定义:
class PricingMySql extends mysqli{
public function __construct() {
parent::__construct(Pricing_DBServerName, Pricing_UserName,
Pricing_Password, Pricing_DBName);
if($this->connect_errno){
throw new Exception("Failed to connect to MySQL: (". $this->connect_errno. ") ". $this->connect_error, $this->connect_errno);
}
}
public function query(string $query, int $resultmode = MYSQLI_STORE_RESULT) {
if(!$result = parent::query($query, $resultmode)) {
echo "Query Execution failed: (", $this->connect_errno, ") ", $query;
}
return $result;
}
根据 php.net,mysqli::query方法的定义完全相同
。 mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed
那么为什么我会收到警告呢?我尝试更改我的代码,以便 $resultmode = null,如警告中所述:
public function query(string $query, int $resultmode = NULL) {
但这仍然会导致相同的警告。我哪里出错了?
编辑以添加:我摆脱了强制类型:
public function query($query, $resultmode = MYSQLI_STORE_RESULT) {
但同样,同样的警告。
如果你是声明是:
PricingMySql::query($query)
而实际的方法是:
mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )
然后,您将缺少第二个参数。
如果您还没有尝试PricingMySql::query($query, null)
,请尝试一下。
此链接提供了更多信息:方法声明应与 PHP 中的父方法兼容