Normalmente se especificaría la base de datos en el DSN cuando se conecta. Pero si está creando una nueva base de datos, obviamente no puede especificar esa base de datos antes de crearla.
Puede cambiar su base de datos por defecto con la declaración USE
:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
posteriores CREATE TABLE
declaraciones serán creados en su NewDatabase.
comentario Re partir @ Mike:
When you switch databases like that it appears to force PDO to emulate prepared statements. Setting PDO::ATTR_EMULATE_PREPARES to false and then trying to use another database will fail.
que acabo de hacer algunas pruebas y no veo que eso ocurra. Cambiar la base de datos solo ocurre en el servidor, y no cambia nada en la configuración de PDO en el cliente. Aquí hay un ejemplo:
<?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 lo que dice es cierto, entonces esto debería funcionar sin error. PDO puede usar un parámetro nombrado dado más de una vez solo si PDO :: ATTR_EMULATE_PREPARES es verdadero. Entonces, si está diciendo que este atributo se establece en verdadero como un efecto secundario de cambiar las bases de datos, entonces debería funcionar.
Pero no funciona, recibe un error "Número de parámetro inválido" que indica que las instrucciones preparadas no emuladas siguen vigentes.
muestran algo de código ... – Jakub
Es probable que necesite para crear un nuevo objeto PDO para conectarse a otra base de datos. – Ignas
Puede usar 'select table.field from database.table', suponiendo que cualquier ID de usuario con la que se haya conectado tenga los derechos apropiados en las otras tablas db /. –