2022-06-29 11:14:04 2131次浏览 2条回答 0 悬赏 50 金钱
$result = (new Query())
->from('{{%draten_map}}')
->where(["[[tname]]" => ['data0001','data0002']])
->andWhere(['<>', 'cn_title', ''])
->all(Yii::$app->erp);

以上是一个很普通的查询代码在php8以下是不报错的,但是我最近升级到php8.1.7之后报如下错误:

Error: mb_stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated
2022-06-29 09:48:46 [-][-][-][error][yii\base\ErrorException:8192] yii\base\ErrorException: mb_stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /data/www/back/vendor/yiisoft/yii2/db/Schema.php:461
Stack trace:
#0 /data/www/back/vendor/yiisoft/yii2/db/Schema.php(461): yii\console\ErrorHandler->handleError(code: '8192', message: ''mb_stripos(): ...', file: ''/data/www/back...', line: '461')
#1 /data/www/back/vendor/yiisoft/yii2/db/Schema.php(461): ::mb_stripos(haystack: 'NULL', needle: ''odbc:'')

可以看出是/data/www/back/vendor/yiisoft/yii2/db/Schema.php:461mb_stripos 函数第一个值传入了 null 导致的
源是一获取DSN字符串

if (mb_stripos($this->db->dsn, 'odbc:') === false && ($value = $this->db->getSlavePdo()->quote($str)) !== false) {
 return $value;
}

有高手帮忙分析下吗

补充于 2022-06-29 11:15

只要不加条件,或者条件是整数类型就不报错,这是怎么回事

  • 回答于 2022-07-12 09:57 举报

    函数quoteValue这是给查询值转义,
    mb_stripos这种版本兼容问题,可以绕着走,(升级本来就有这些风险)

    为啥你的$this->db->dsn是null?<===这个可以处理一下吧?
    可以考虑改成Model查询方式。

  • 回答于 2022-10-29 15:32 举报

    php8用的人多吗?

您需要登录后才可以回答。登录 | 立即注册
xjcallen
见习主管

xjcallen 东莞

注册时间:2017-01-10
最后登录:2022-06-30
在线时长:6小时36分
  • 粉丝0
  • 金钱175
  • 威望0
  • 积分235

热门问题