Класс не найден в среде AWS Elasti c из бобовых стеблей - PullRequest
0 голосов
/ 22 апреля 2020

Я получаю следующую ошибку из моего приложения elasti c beanstalk:

Неустранимая ошибка: ошибка Uncaught: класс 'App \ PDO' не найден в / var / app / current / crawler / app / SQLConnection. php: 32 Трассировка стека: # 0 /var/app/current/crawler/init.php(18): App \ SQLConnection-> connect () # 1 {main} добавляется в / var / app / current / crawler / app / SQLConnection. php on line 32

Приложение работает идеально локально (как это обычно бывает с ошибками). Все загруженные библиотеки и зависимости включены в приложение, которое я загрузил.

Кто-нибудь может увидеть, где я ошибся, пожалуйста?

Сценарий инициализации для создания таблиц БД:

<?php 
require 'vendor/autoload.php'; 
require (__DIR__.'/app/SQLConnection.php');
require (__DIR__.'/app/SQLCreateTable.php');
require (__DIR__.'/app/SQLInsert.php');
require (__DIR__.'/app/SQLRetrieve.php');
require (__DIR__.'/app/SQLDelete.php');
use App\SQLConnection;
use App\SQLCreateTable;
use App\SQLInsert;
use App\SQLRetrieve;
use App\SQLDelete;

try {

    //connect to DB
    $sql = new SQLCreateTable((new SQLConnection())->connect());
    //get list of tables
    $tables = $sql->getTableList();
    //check if required tables excist
    if(in_array('results',$tables) && in_array('logs',$tables)){
        echo "Tables already created. You will be redirected to the home page"; 
        header( "refresh:5;url=/index.php" );
    }else {
        //create tables
        try {
            $sql->createTables();
            echo "Tables succesfully created! You will be redirected to the home page";
            header( "refresh:5;url=/index.php" );
        } catch (\PDOException $e) {
            echo "Failed to create tables: " . $e->getMessage();
        }

    }

} catch (\PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

Затем сценарий подключения SQL:

<?php
namespace App;

/**
 * SQL connnection
 */
class SQLConnection {
    /**
     * PDO instance
     * @var type 
     */
    private $pdo;

    /**
     * return in instance of the PDO object that connects to the SQLite database
     * @return \PDO
     */
    public function connect() {

        $dbhost = $_SERVER['RDS_HOSTNAME'];
        $dbport = $_SERVER['RDS_PORT'];
        $dbname = $_SERVER['RDS_DB_NAME'];
        $charset = 'utf8' ;

        $dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname};charset={$charset}";
        $username = $_SERVER['RDS_USERNAME'];
        $password = $_SERVER['RDS_PASSWORD'];

        if ($this->pdo == null) {
            try {
                // $this->pdo = new \PDO("mysql:host=localhost;dbname=crawler", "root", "");
                $this->pdo = new PDO($dsn, $username, $password);
                // set the PDO error mode to exception
                $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
            } catch (\PDOException $e) {
               echo "Connection failed: " . $e->getMessage();
            }
        }
        return $this->pdo;
    }


}

Сценарий 'Init' находится на уровне root, а сценарий SQLconnection находится в папке с именем app.

Спасибо, ребята!

1 Ответ

0 голосов
/ 22 апреля 2020

Нашли решение!

$this->pdo = new PDO($dsn, $username, $password);

Необходимо изменить

$this->pdo = new \PDO($dsn, $username, $password);

Если кто-нибудь точно знает, почему это так, пожалуйста, поделитесь

...