Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function Kit\core::__construct() on PDO class

I am currently looking at improving my PHP knowledge and creating websites to a better extent by using classes and such but I’ve ran into an issue when trying to allow other classes in separate files to access the PDO connection that I’ve sent up. I’ve tried hundreds of resolutions which have been inputted onto this site but can’t seem to figure it out at all and can’t seem to understand where I’m going wrong.

I’m being met with the following error:


    [16-Sep-2022 11:05:02 UTC] PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function Kit\core::__construct(), 0 passed in /home/liamapri/public_html/kit/global.php on line 24 and exactly 1 expected in /home/liamapri/public_html/kit/app/class.core.php:11
    Stack trace:
    #0 /home/liamapri/public_html/kit/global.php(24): Kit\core->__construct()
    #1 /home/liamapri/public_html/index.php(3): include_once('/home/liamapri/...')
    #2 {main}
      thrown in /home/liamapri/public_html/kit/app/class.core.php on line 11

I have a global.php file which will be added to each individually page such as /home /index etc, it references all the files that I’ll need and starts the session from it, see below:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel


    error_reporting(E_ALL ^ E_NOTICE);
    
    define('C', $_SERVER["DOCUMENT_ROOT"].'/kit/conf/');
    define('A', $_SERVER["DOCUMENT_ROOT"].'/kit/app/');
    define('I', 'interfaces/');
    
    // Management
    require_once C . 'config.php';
    
    // Interfaces
    require_once A . I . 'interface.engine.php';
    require_once A . I . 'interface.core.php';
    require_once A . I . 'interface.template.php';
    
    // Classes
    require_once A . 'class.engine.php';
    require_once A . 'class.core.php';
    require_once A . 'class.template.php';
    
    // OBJ
    $engine = new Kit\engine();
    $core = new Kit\core();
    $template = new Kit\template();
    
    // Start
    session_start();
    
    $template->Initiate();

This references the class.engine.php first which is where I have created the database connection class, as shown below:


    namespace Kit;
    
    use PDO;
    
    if(!defined('IN_INDEX')) { die('Sorry, this file cannot be viewed.'); }
    
    class engine
    {
        public $pdo;
    
        public function __construct()
        {
            global $_CONFIG;
            $dsn = "mysql:host=".$_CONFIG['mysql']['hostname'].";dbname=".$_CONFIG['mysql']['database'].";charset=".$_CONFIG['mysql']['charset'].";port=".$_CONFIG['mysql']['port'].";";
            $options = [
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES   => false,
            ];
            try {
                $this->pdo = new PDO($dsn, $_CONFIG['mysql']['username'], $_CONFIG['mysql']['password'], $options);
            } catch (\PDOException $e) {
                print "<b>An error has occurred whilst connecting to the database:</b><br />" . $e->getMessage() . "";
                die();
            }
        }
    }
    
    $connection = new engine();

I’m then trying to run a PDO query on another class (class.core.php) and keep getting met with either a PDO can’t be found error or the one described above.

See the file below:


    namespace Kit;
    
    if(!defined('IN_INDEX')) { die('Sorry, this file cannot be viewed.'); }
    
    class core implements iCore
    {
        public $connection;
    
        public function __construct($connection)
        {
            $this->connection = $connection;
        }
    
        public function website_settings()
        {
            $qry = $this->connection->pdo->prepare("SELECT `website_name` FROM `kit_system_settings`");
            $qry->execute([]);
            if ($qry->rowCount() == 1) { while($row = $qry->fetch()) { return $row; } }
        }
    }

Sorry if this is a simple fix but I really can’t see where I’m going wrong.

>Solution :

Look in your global .php on Line 24 (its probably this line: $core = new Kit\core();)

In your class.core.php you tell the constructor that it will get a connection, but in your global.php you dont give constructor (when you initialize a class) any argument.

That’s what this error is telling you

PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function Kit\core::__construct(), 0 passed

Just guessing, but i think

$core = new Kit\core($engine->pdo); 

will fix your issue.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading