sql >> Database >  >> RDS >> Mysql

Hoe selecteer ik een MySQL-database om te gebruiken met PDO in PHP?

Normaal gesproken geeft u de database op in de DSN wanneer u verbinding maakt. Maar als u een nieuwe database aanmaakt, kunt u die database natuurlijk niet de DSN specificeren voordat u deze aanmaakt.

U kunt uw standaarddatabase wijzigen met de USE verklaring:

$dbh = new PDO("mysql:host=...;dbname=mysql", ...);

$dbh->query("create database newdatabase");

$dbh->query("use newdatabase");

Volgende CREATE TABLE statements worden aangemaakt in uw nieuwe database.

Re reactie van @Mike:

Ik heb net wat tests gedaan en ik zie dat niet gebeuren. Het wijzigen van de database gebeurt alleen op de server en verandert niets aan de configuratie van PDO in de client. Hier is een voorbeeld:

<?php

// connect to database
try {
    $pdo = new PDO('mysql:host=huey;dbname=test', 'root', 'root');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $err) {
    die($err->getMessage());
}

$stmt = $pdo->prepare("select * from foo WHERE i = :i");
$result = $stmt->execute(array("i"=>123));
print_r($stmt->fetchAll(PDO::FETCH_ASSOC));

$pdo->exec("use test2");

$stmt = $pdo->prepare("select * from foo2 WHERE i = :i AND i = :i");
$result = $stmt->execute(array("i"=>456));
print_r($stmt->fetchAll(PDO::FETCH_ASSOC));

Als wat je zegt waar is, dan zou dit foutloos moeten werken. PDO kan een bepaalde benoemde parameter meer dan één keer gebruiken als PDO::ATTR_EMULATE_PREPARES waar is. Dus als je zegt dat dit attribuut is ingesteld op true als een neveneffect van het wijzigen van databases, dan zou het moeten werken.

Maar het werkt niet -- het krijgt een foutmelding "Ongeldig parameternummer", wat aangeeft dat niet-geëmuleerde voorbereide instructies van kracht blijven.



  1. levenshtein alternatief

  2. Mysql-visualisatietools

  3. Database-ontwerp met Vertabelo

  4. Database-optimalisatie:indexen