sql >> Databasteknik >  >> RDS >> Mysql

Hur man korrekt ställer in en PDO-anslutning

Målet

Som jag ser det är ditt mål i det här fallet tvåfaldigt:

  • skapa och underhålla en enda/återanvändbar anslutning per databas
  • se till att anslutningen har konfigurerats korrekt

Lösning

Jag skulle rekommendera att använda både anonym funktion och fabriksmönster för att hantera PDO-anslutning. Användningen av den skulle se ut så här :

$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 );

Sedan i en annan fil eller lägre i samma fil:

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

Själva fabriken borde se ut ungefär så här:

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 );
    }

}

Detta sätt skulle låta dig ha en centraliserad struktur, som ser till att anslutning skapas endast när det behövs. Det skulle också göra processen med enhetstestning och underhåll mycket enklare.

Leverantören i det här fallet skulle hittas någonstans i bootstrap-stadiet. Det här tillvägagångssättet skulle också ge en tydlig plats där du ska definiera konfigurationen som du använder för att ansluta till DB.

Tänk på att detta är ett extremt förenklat exempel . Du kan också ha nytta av att titta på två följande videor:

Jag skulle också starkt rekommendera att läsa en ordentlig handledning om användningen av PDO (det finns en logg över dålig handledning online).



  1. Hur man kommenterar MYSQL autoinkrementfält med JPA-kommentarer

  2. Finns det något sätt att kontrollera prestanda för mysql-indexering

  3. Rangordna funktioner i SQL Server

  4. Ansluter PostgreSQL 9.2.1 till Hibernate