mysqli_result :: fetch_all()期望参数1为long,给定字符串

时间:2015-11-18 07:40:54

标签: php

我在一个函数中得到奇怪的PHP警告。它适用于开发环境,但在生产环境中失败。

  

[2015年11月18日08:14:20欧洲/巴黎] PHP警告:mysqli_result :: fetch_all()期望参数1为长,字符串在\ NA1 \ BACKOFFICE \ backoffice \ applications \ work \ php \中给出第1093行的workAdmin.class.php

在我的代码中我有

$res = $this->conn->query("SELECT DISTINCT YEAR(date_work) FROM `work` WHERE disposable_day = 1");
$resultSet = $res->fetch_all(MYSQL_NUM);

在许多其他地方使用相同的结构并且它可以工作,但在这里突然失败。

开发和生产环境都具有相同的堆栈Apache 2.4.10 + PHP 5.5.15

PS。当然,我可以通过删除MYSQL_NUM轻松解决它(不要问我为什么它实际上在这里使用,它是旧的遗留应用程序而我根本就不知道)但是,我想知道为什么MYSQL_NUM常量可以有字符串类型?

1 个答案:

答案 0 :(得分:2)

MYSQL_NUM常量由旧的,久已弃用的,即将消失的mysql extension定义。如果您的环境中不存在,则MYSQL_NUM表达式的评估结果为(string) "MYSQL_NUM"

您的错误消息表明您的代码实际使用了mysqli extensionmysqli::fetch_all()确实采用整数参数,代码应为$res->fetch_all(MYSQLI_NUM);(注意MYSQLI_NUM中的I)。

不幸的是,MYSQL_NUMMYSQLI_NUM都存在并在所有以前的系统上评估为相同的整数值,因此错误直到今天才被忽视。