通常、接続時にDSNでデータベースを指定します。ただし、新しいデータベースを作成する場合は、作成する前にそのデータベースにDSNを指定することはできません。
USE
を使用してデフォルトのデータベースを変更できます ステートメント:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
後続のCREATE TABLE
ステートメントは新しいデータベースに作成されます。
@Mikeからのコメント:
いくつかのテストを行っただけですが、それが起こっているのはわかりません。データベースの変更はサーバー上でのみ行われ、クライアントでのPDOの構成については何も変更されません。次に例を示します:
<?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));
あなたが言っていることが真実なら、これはエラーなしで機能するはずです。 PDOは、PDO ::ATTR_EMULATE_PREPARESがtrueの場合にのみ、指定された名前付きパラメーターを複数回使用できます。したがって、データベース変更の副作用としてこの属性がtrueに設定されていると言っている場合は、機能するはずです。
ただし、機能しません。エミュレートされていないプリペアドステートメントが有効なままであることを示す「無効なパラメータ番号」というエラーが発生します。