Biasanya Anda akan menentukan database di DSN saat Anda terhubung. Tetapi jika Anda membuat database baru, jelas Anda tidak dapat menentukan DSN database itu sebelum Anda membuatnya.
Anda dapat mengubah database default Anda dengan USE
pernyataan:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
CREATE TABLE
. berikutnya pernyataan akan dibuat di database baru Anda.
Komentar ulang dari @Mike:
Saya baru saja melakukan beberapa tes dan saya tidak melihat itu terjadi. Mengubah database hanya terjadi di server, dan tidak mengubah apa pun tentang konfigurasi PDO di klien. Ini contohnya:
<?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));
Jika apa yang Anda katakan itu benar, maka ini akan bekerja tanpa kesalahan. PDO dapat menggunakan parameter bernama yang diberikan lebih dari sekali hanya jika PDO::ATTR_EMULATE_PREPARES benar. Jadi, jika Anda mengatakan bahwa atribut ini disetel ke true sebagai efek samping dari mengubah basis data, maka itu akan berfungsi.
Namun tidak berhasil -- muncul kesalahan "Nomor parameter tidak valid" yang menunjukkan bahwa pernyataan siap yang tidak ditiru tetap berlaku.