CodeIgniter 4 项目中未定义常量“CodeIgniter\Database\MySQLi\MYSQLI_STORE_RESULT”

问题描述 投票:0回答:6

我已经随 Composer 安装了 CodeIgniter 项目 (4.1.5)。我在 PHP 8.0.12 上运行它

当我尝试与数据库通信时,收到内部服务器错误 500,日志消息如下:

CRITICAL - 2021-11-13 01:39:18 --> Undefined constant "CodeIgniter\Database\MySQLi\MYSQLI_STORE_RESULT"
#0 D:\Sites\ea4\vendor\codeigniter4\framework\system\Database\Database.php(56): CodeIgniter\Database\Database->initDriver('MySQLi', 'CodeIgniter\\Dat...', Array)
#1 D:\Sites\ea4\vendor\codeigniter4\framework\system\Database\Config.php(78): CodeIgniter\Database\Database->load(Array, 'default')
#2 D:\Sites\ea4\vendor\codeigniter4\framework\system\Model.php(97): CodeIgniter\Database\Config::connect('default')
#3 D:\Sites\ea4\app\Controllers\Backend\Home.php(33): CodeIgniter\Model->__construct()
#4 D:\Sites\ea4\vendor\codeigniter4\framework\system\CodeIgniter.php(824): App\Controllers\Backend\Home->index()
#5 D:\Sites\ea4\vendor\codeigniter4\framework\system\CodeIgniter.php(410): CodeIgniter\CodeIgniter->runController(Object(App\Controllers\Backend\Home))
#6 D:\Sites\ea4\vendor\codeigniter4\framework\system\CodeIgniter.php(318): CodeIgniter\CodeIgniter->handleRequest(NULL, Object(Config\Cache), false)
#7 D:\Sites\ea4\public\index.php(37): CodeIgniter\CodeIgniter->run()

在家庭控制器中,我有以下代码:

public function index()
{
    $session = session();
    $data = [];
    // Check for post
    if ($this->request->getMethod() === 'post') {
        // Validate the user input
        if (!($this->validate([
            'cmsuserEmail'      => ['label' => 'E-Mail',                'rules'   => 'required|min_length[6]|max_length[50]|valid_email'],
            'cmsuserPassword'   => ['label' => 'Κωδικός πρόσβασης',     'rules'   => 'required|min_length[8]|max_length[255]'],
        ]))) {
            // Validation has failed, redirect the user back
            return redirect()->to(base_url() . '/Backend/Home/index')->withInput();
        }
        $model = new CmsuserModel();
        $user = $model->where('cmsuserEmail', $this->request->getPost('cmsuserEmail'))->first();
        // If I try to var_dump user, var_dump is not displayed, if I print string "Debug" and die()  one line above, string is printed.

有人知道我为什么会收到此错误吗?我应该定义常量 MYSQLI_STORE_RESULT 并在哪里定义?

php codeigniter mysqli codeigniter-4
6个回答
5
投票

据我了解,你可以检查是否安装了PHP的mysqli模块。

通过服务器 cli 上的

php -m
检查,您应该将
mysqli
列为模块之一。

我在这里检查了参考https://www.php.net/manual/en/mysqli.installation.php

我在 docker 上托管的 CodeIgniter 4 文件上使用了这个,我也遇到了这个错误。经过一番研究,我只是确保在映像构建中正在安装/安装 PHP 的

mysqli
模块。


3
投票

就我而言,我在 php.ini 中取消注释了

extension=mysqli
extension_dir="ext"
,以及 php/ext 文件夹中的 php_mysqli.dll 文件,我只是删除了
;
extension=mysqli
行上的
extension_dir="ext"
在 php.ini 中: 然后使用终端上的
php -m
检查
mysqli
是否在模块列表中。

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
;extension_dir = "./"
; On windows:
extension_dir = "ext"
;extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli

0
投票

我遇到了同样的错误,重新启动我的应用程序服务器,错误就消失了,我不能说根本原因是什么,但这解决了我的问题。


0
投票

您正在使用模型。 CI4 将假设您正在使用数据库,然后选择默认数据库 MySQLi 并确认先决条件是否满足。 如果您的 php.ini 中没有定义 MySQLi,则会抛出错误。 就我而言,我不想启用 MySQLi,因此我将 app/Config/Database.php 中的 DBDriver 更改为 sqlsrv,因为我在 php.ini 中启用了 MSSQL 模块,并且一切正常。不需要给它 DSN、主机名、用户名等。它只需要查看我是否有数据库类型的驱动程序。


0
投票

如果您在 Linux 系统上使用 PHP 并且想要安装 MySQLi 扩展,您可以使用 Linux 发行版的包管理器来安装。确切的包名称可能会有所不同,具体取决于您使用的发行版。这是在 Ubuntu 中安装 MySQLi 扩展的终端命令:

sudo apt 更新 sudo apt install php-mysql sudo systemctl 重新启动 apache2

如果您使用其他版本的linux,请按照该版本安装php-mysql,然后重新启动您使用的apache2或nginx。


0
投票
myuser@myServer:~$ php -m

产生此错误以及下面列出的安装的其他模块:

PHP 警告:PHP 启动:无法加载动态库“mysqli” (尝试过:/usr/lib/php/20210902/mysqli(/usr/lib/php/20210902/mysqli: 无法打开共享对象文件:没有这样的文件或目录), /usr/lib/php/20210902/mysqli.so (/usr/lib/php/20210902/mysqli.so: 无法打开共享对象文件:没有这样的文件或目录))处于未知状态 上线0

使用以下命令安装 mysqli 并重新启动 apache 解决了它:

sudo apt-get install php-mysqli

运行

php -m
php -v
时我仍然遇到此错误...

© www.soinside.com 2019 - 2024. All rights reserved.