提问人:D.B. 提问时间:11/13/2021 更新时间:8/1/2023 访问量:9632
CodeIgniter 4 项目中未定义的常量 “CodeIgniter\Database\MySQLi\MYSQLI_STORE_RESULT”
Undefined constant "CodeIgniter\Database\MySQLi\MYSQLI_STORE_RESULT" in CodeIgniter 4 project
问:
我用 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的mysqli模块。
通过服务器的 cli 进行检查,您应该已列为模块之一。php -m
mysqli
我在这里检查了参考资料 https://www.php.net/manual/en/mysqli.installation.php
我在 docker 上托管的 CodeIgniter 4 文件上使用了它,我也收到了这个错误。经过一番研究,我只是在映像构建中确保正在安装/安装PHP模块。mysqli
就我而言,我取消了注释,在我的php.ini中,以及 php/ext 文件夹中的php_mysqli.dll文件,我只是删除了 php.ini 中的 and 行:
然后使用 on 终端检查是否在模块列表中。extension=mysqli
extension_dir="ext"
;
extension=mysqli
extension_dir="ext"
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
我遇到了同样的错误,重新启动我的应用程序服务器,错误消失了,我不能说根本原因是什么,但这解决了我的问题。
您正在使用模型。然后,CI4 将假设您正在使用数据库,然后转到默认数据库,即 MySQLi,并确认先决条件是否存在。 如果您没有在php.ini中定义 MySQLi,它将引发错误。 就我而言,我不想启用 MySQLi,因此我将 app/Config/Database.php 中的 DBDriver 更改为 sqlsrv,因为我在php.ini中启用了 MSSQL 模块并且一切正常。不需要给它DSN,主机名,用户名等。它只需要看到我有数据库类型的驱动程序。
如果您在 Linux 系统上使用 PHP 并想要安装 MySQLi 扩展,则可以使用 Linux 发行版的包管理器来实现。确切的包名称可能因您使用的发行版而异。以下是在 Ubuntu 中安装 MySQLi 扩展的终端命令:
sudo apt 更新 sudo apt 安装 php-mysql sudo systemctl 重启 apache2
如果您使用其他版本的 linux,请根据该版本安装 php-mysql,然后重新启动您使用的 apache2 或 nginx。
评论