In genere dovresti specificare il database nel DSN quando ti connetti. Ma se stai creando un nuovo database, ovviamente non puoi specificare quel database il DSN prima di crearlo.
Puoi cambiare il tuo database predefinito con USE
dichiarazione:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
Successivo CREATE TABLE
le istruzioni verranno create nel tuo nuovo database.
Commento di @Mike:
Ho appena fatto alcuni test e non vedo che ciò accada. La modifica del database avviene solo sul server e non cambia nulla sulla configurazione di PDO nel client. Ecco un esempio:
<?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));
Se quello che stai dicendo è vero, allora dovrebbe funzionare senza errori. PDO può utilizzare un dato parametro denominato più di una volta solo se PDO::ATTR_EMULATE_PREPARES è true. Quindi, se stai dicendo che questo attributo è impostato su true come effetto collaterale della modifica dei database, dovrebbe funzionare.
Ma non funziona:viene visualizzato un errore "Numero parametro non valido" che indica che le istruzioni preparate non emulate rimangono in vigore.