我在一个函数中得到奇怪的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常量可以有字符串类型?
答案 0 :(得分:2)
MYSQL_NUM
常量由旧的,久已弃用的,即将消失的mysql
extension定义。如果您的环境中不存在,则MYSQL_NUM
表达式的评估结果为(string) "MYSQL_NUM"
。
您的错误消息表明您的代码实际使用了mysqli
extension。 mysqli::fetch_all()
确实采用整数参数,代码应为$res->fetch_all(MYSQLI_NUM);
(注意MYSQLI_NUM
中的I
)。
不幸的是,MYSQL_NUM
和MYSQLI_NUM
都存在并在所有以前的系统上评估为相同的整数值,因此错误直到今天才被忽视。