sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo selecciono una base de datos MySQL para usar con PDO en PHP?

Por lo general, especificaría la base de datos en el DSN cuando se conecte. Pero si está creando una nueva base de datos, obviamente no puede especificar el DSN de esa base de datos antes de crearla.

Puede cambiar su base de datos predeterminada con USE declaración:

$dbh = new PDO("mysql:host=...;dbname=mysql", ...);

$dbh->query("create database newdatabase");

$dbh->query("use newdatabase");

Subsiguiente CREATE TABLE las declaraciones se crearán en su nueva base de datos.

Re comentario de @Mike:

Acabo de hacer algunas pruebas y no veo que eso suceda. Cambiar la base de datos solo ocurre en el servidor y no cambia nada sobre la configuración de PDO en el cliente. He aquí 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 dices es cierto, entonces esto debería funcionar sin errores. PDO puede usar un parámetro con nombre determinado 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 no válido" que indica que las declaraciones preparadas no emuladas siguen vigentes.