sql >> Database teknologi >  >> RDS >> Mysql

Sådan konfigureres en PDO-forbindelse korrekt

Målet

Som jeg ser det, er dit mål i dette tilfælde todelt:

  • opret og vedligehold en enkelt/genanvendelig forbindelse pr. database
  • sørg for, at forbindelsen er konfigureret korrekt

Løsning

Jeg vil anbefale at bruge både anonym funktion og fabriksmønster til at håndtere PDO-forbindelse. Brugen af ​​det ville se sådan ud :

$provider = function()
{
    $instance = new PDO('mysql:......;charset=utf8', 'username', 'password');
    $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    return $instance;
};

$factory = new StructureFactory( $provider );

Derefter i en anden fil eller lavere i samme fil:

$something = $factory->create('Something');
$foobar = $factory->create('Foobar');

Selve fabrikken skulle se nogenlunde sådan ud:

class StructureFactory
{
    protected $provider = null;
    protected $connection = null;

    public function __construct( callable $provider )
    {
        $this->provider = $provider;
    }

    public function create( $name)
    {
        if ( $this->connection === null )
        {
            $this->connection = call_user_func( $this->provider );
        }
        return new $name( $this->connection );
    }

}

På denne måde vil du have en centraliseret struktur, som sikrer, at forbindelsen kun oprettes, når det er nødvendigt. Det ville også gøre processen med enhedstest og vedligeholdelse meget nemmere.

Udbyderen i dette tilfælde ville blive fundet et sted på bootstrap-stadiet. Denne tilgang vil også give en klar placering, hvor du skal definere den konfiguration, du bruger til at oprette forbindelse til DB.

Husk, at dette er et ekstremt forenklet eksempel . Du kan også drage fordel af at se to følgende videoer:

Jeg vil også stærkt anbefale at læse en ordentlig vejledning om brug af PDO (der er en log over dårlige vejledninger online).



  1. Ydeevneovervågning for TimescaleDB

  2. Hvornår skal du bruge SQL Server med Access? (Tip:Næsten altid)

  3. Spring Boot Query-annotering med nativeQuery virker ikke i Postgresql

  4. Hvordan sammenkædes kolonner i en Postgres SELECT?