Welcome Guest, Not a member yet? Register   Sign In
An uncaught Exception was encountered
#1

I've searched this topic and yes, I'm using MAMP on mac. Migrations run from URl but when using spark via CLI I get this error for any database command. Seeding or Migrations.
That's all I got for tonight. I need sleep. I've seen a handful of threads that have addressed this problem but I haven't found the answer.

Code:
An uncaught Exception was encountered

Type:        CodeIgniter\Database\Exceptions\DatabaseException
Message:    Unable to connect to the database.
Main connection [MySQLi]: No such file or directory
Filename:    /tutorial/vendor/codeigniter4/framework/system/Database/BaseConnection.php
Line Number: 407



CRITICAL - 2022-03-20 07:03:22 --> Unable to connect to the database.
Main connection [MySQLi]: No such file or directory
#0 /tutorial/vendor/codeigniter4/framework/system/Database/Database.php(67): CodeIgniter\Database\BaseConnection->initialize()
#1 /tutorial/vendor/codeigniter4/framework/system/Database/Config.php(105): CodeIgniter\Database\Database->loadForge(Object(CodeIgniter\Database\MySQLi\Connection))
#2 /tutorial/vendor/codeigniter4/framework/system/Database/Seeder.php(98): CodeIgniter\Database\Config::forge(NULL)
#3 /tutorial/vendor/codeigniter4/framework/system/Commands/Database/Seed.php(69): CodeIgniter\Database\Seeder->__construct(Object(Config\Database))
#4 /tutorial/vendor/codeigniter4/framework/system/CLI/Commands.php(63): CodeIgniter\Commands\Database\Seed->run(Array)
#5 /tutorial/vendor/codeigniter4/framework/system/CLI/CommandRunner.php(70): CodeIgniter\CLI\Commands->run('db:seed', Array)
#6 /tutorial/vendor/codeigniter4/framework/system/CLI/CommandRunner.php(56): CodeIgniter\CLI\CommandRunner->index(Array)
#7 /tutorial/vendor/codeigniter4/framework/system/CodeIgniter.php(830): CodeIgniter\CLI\CommandRunner->_remap('index', 'db:seed', 'UserSeeder')
#8 /tutorial/vendor/codeigniter4/framework/system/CodeIgniter.php(419): CodeIgniter\CodeIgniter->runController(Object(CodeIgniter\CLI\CommandRunner))
#9 /tutorial/vendor/codeigniter4/framework/system/CodeIgniter.php(326): CodeIgniter\CodeIgniter->handleRequest(NULL, Object(Config\Cache), false)
#10 /tutorial/vendor/codeigniter4/framework/system/CLI/Console.php(48): CodeIgniter\CodeIgniter->run()
#11 /tutorial/spark(57): CodeIgniter\CLI\Console->run()
#12 {main}
Reply
#2

Try

PHP Code:
'hostname' => '127.0.0.1'
Reply
#3

(This post was last modified: 03-20-2022, 09:20 AM by ChicagoPhil.)

(03-20-2022, 04:31 AM)kenjis Wrote: Try

PHP Code:
'hostname' => '127.0.0.1'

Same result. Same error. EDIT: not exactly the same error

Code:
An uncaught Exception was encountered

Type:        CodeIgniter\Database\Exceptions\DatabaseException
Message:    Unable to connect to the database.
Main connection [MySQLi]: Connection refused
Filename:    /tutorial/vendor/codeigniter4/framework/system/Database/BaseConnection.php
Line Number: 407
Reply
#4

So I solved the problem but its a terrible solution. I made a change in the frameworks system code and it works like a charm.

File: /vendor/codeigniter4/framework/system/Database/MySQLi/Connection.php

I changed this code:
Code:
public function connect(bool $persistent = false)
    {
        // Do we have a socket path?
        if ($this->hostname[0] === '/') {
            $hostname = null;
            $port    = null;
            $socket  = $this->hostname;
        } else {
            $hostname = ($persistent === true) ? 'p:' . $this->hostname : $this->hostname;
            $port    = empty($this->port) ? null : $this->port;
            $socket  = '';
        }

To this :
Code:
public function connect(bool $persistent = FALSE)
    {
        // Do we have a socket path?
        if($this->hostname[0] === '/')
        {
            $hostname = NULL;
            $port = NULL;
            $socket = $this->hostname;
        }
        else
        {
            $hostname = ($persistent === TRUE) ? 'p:' . $this->hostname : $this->hostname;
            $port = empty($this->port) ? NULL : $this->port;
            $socket = '/Applications/MAMP/tmp/mysql/mysql.sock';
        }

Essentially it was the socket having an empty string that was the problem. I hope there is a better way to set this setting that I just don't know about.
Reply
#5

I don't want to mark this thread as solved just yet. I'm looking for feedback on why what I did worked and if there is a way to do it without going into system files.
Reply
#6

Your solution there is telling me that it is not finding the MySQL files. Which maybe a configuration setup problem.
But wait and see if one of the development teams comments back to you.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#7

(03-21-2022, 12:47 AM)InsiteFX Wrote: Your solution there is telling me that it is not finding the MySQL files. Which maybe a configuration setup problem.
But wait and see if one of the development teams comments back to you.

I agree. If I understood the logic being used in the PHP code, I could suggest a solution to the problem. All I did was track back the error to a point where there had to be an issue. I seen the socket setting was blank for the mysqli connect function and dropped in the socket info. The thing I don't get is why isn't the setting in the database configuration? I see socket logic in the code but where is it being set at?
Reply
#8

(This post was last modified: 03-21-2022, 05:59 PM by ChicagoPhil.)

I have confirmed that the missing socket setting is the problem. I think the Codeigniter team needs to consider adding one more setting to the database configuration file. It would be nice to have a socket setting for people that connect to their localhost MYSQL via unix socket. It would probably take 10 minutes to add it to the code and most of that time would be finding the files you need to open to edit.

it would be nice to see something like this:
Code:
public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => 'root',
        'database' => 'codeigniter',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'    => 3306,
        'socket' => '',
    ];
Reply
#9

try
PHP Code:
'hostname' => '/Applications/MAMP/tmp/mysql/mysql.sock'
Reply
#10

(03-21-2022, 07:03 PM)kenjis Wrote: try
PHP Code:
'hostname' => '/Applications/MAMP/tmp/mysql/mysql.sock'

That did the trick! I tried something very close to that and it didn't work. I put localhost:/Applications/MAMP/tmp/mysql/mysql.sock in there and no dice. I guess, I can mark this solved now.
I knew it had to be something small like that. That's why I got stuck on it.

Thanks again for the help.
Reply




Theme © iAndrew 2016 - Forum software by © MyBB