En règle générale, vous spécifiez la base de données dans le DSN lorsque vous vous connectez. Mais si vous créez une nouvelle base de données, vous ne pouvez évidemment pas spécifier cette base de données dans le DSN avant de la créer.
Vous pouvez changer votre base de données par défaut avec le USE
déclaration :
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
CREATE TABLE
suivant les relevés seront créés dans votre nouvelle base de données.
Re commentaire de @Mike :
Je viens de faire quelques tests et je ne vois pas cela se produire. La modification de la base de données ne se produit que sur le serveur et ne change rien à la configuration de PDO dans le client. Voici un exemple :
<?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));
Si ce que vous dites est vrai, cela devrait fonctionner sans erreur. PDO peut utiliser un paramètre nommé donné plus d'une fois uniquement si PDO::ATTR_EMULATE_PREPARES est vrai. Donc, si vous dites que cet attribut est défini sur true en tant qu'effet secondaire de la modification des bases de données, cela devrait fonctionner.
Mais cela ne fonctionne pas - il obtient une erreur "Numéro de paramètre invalide" qui indique que les instructions préparées non émulées restent en vigueur.