Nette – přístup k databázi bez PDO

Určitě nebudu sám, koho štvou nejrůznější komplikace při přesunu projektu z localu na hosting.
Rád bych se zde podělil o jednu zkušenost, která snad někomu usnadní práci a případně někdo poradí, jak a co udělat lépe.

Tedy problém byl, že na hostingu nebyla knihovna php_pdo_mysql. Na locale ,kde tuto knihovnu mám, mi vše s NetteDatabase jelo v pohodě, ale na locale jsem se nemohl k DB připojit.

Něco jsem pročetl na fórech a zjistil jsem, že snad s dibi by neměl být problém.

Tedy jsem si config.neon a authenticator musel přepsat pro dibi. Zde jsou:

config.neon

common:
    php:
        date.timezone: Europe/Prague
 
    services:
        database:
            class: DibiConnection
            arguments: [ {driver: %database.driver%, charset: utf8, hostname: %database.host%, username: %database.user%, password: %database.password%, database: %database.dbname%, persistent: true, lazy: true} ]
 
        authorizator:
            class: AclProjSecurityAcl
 
        authenticator:
            class: AclProjSecurityAuthenticator
            arguments: [@database, %security.salt%]
 
development < common:
    parameters:
        database:
            driver : mysql
            host : localhost
            dbname : ...
            user : ...
            password: ...
 
        security:
            salt: zb1g7IHt1I
 
production < common:
    parameters:
        database:
            driver : mysql
            host : localhost
            dbname : ...
            user : ...
            password: ...
 
        security:
            salt: zb1g7IHt1I

Authenticator.php

db = $dbConnection;
        $this->passwordSalt = $salt;
    }
 
    public function authenticate(array $credentials)
    {
        $email    = $credentials[self::USERNAME];
        $password = sha1($credentials[self::PASSWORD] . $this->passwordSalt);
 
        $user = $this->db
                ->select('*')
                ->from('user')
                ->where('email=%s', $email)
                ->fetch();
 
        if (!$user) {
            throw new AuthenticationException("User with login email '$email' not found", self::IDENTITY_NOT_FOUND);
        }
        if ($user->password != $password) {
            throw new AuthenticationException('Wrong password', self::INVALID_CREDENTIAL);
        }
 
        $identity = new Identity($user->id, $user->role);
        $identity->name = $user->name;
        $identity->email = $user->email;
 
        return $identity;
    }
 
}

Snad to pomůže, nakopne, inspiruje a hlavně zkrátí někomu dalšímu ztracený čas. Musel jsem také upravovat všechny dotazy na DB v modelu pro dibi. Nonaštěstí jsem toho neměl moc.

Moc se v tomto neorientuji, tak budu rád za jakoukoliv dobrou radu do budoucna a případnou debatu na toto téma.