In genere si dovrebbe specificare il database nel DSN quando ci si connette. Ma se stai creando un nuovo database, ovviamente non puoi specificare quel database come il DSN prima di crearlo.
È possibile modificare il database di default con l'affermazione USE
: saranno creati
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
successivi CREATE TABLE
dichiarazioni nel vostro newdatabase.
Re commento da @ 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.
Ho appena fatto alcuni test e non vedo che questo accada. La modifica del database avviene solo sul server e non modifica nulla sulla configurazione di PDO nel client. Ecco un esempio:
<?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));
Se quello che stai dicendo è vero, allora questo dovrebbe funzionare senza errori. PDO può utilizzare un determinato parametro denominato più di una volta solo se PDO :: ATTR_EMULATE_PREPARES è true. Quindi se stai dicendo che questo attributo è impostato su true come effetto collaterale della modifica dei database, allora dovrebbe funzionare.
Ma non funziona: riceve un errore "Numero di parametro non valido" che indica che le istruzioni preparate non emulate rimangono attive.
fonte
2012-01-02 21:25:10
mostrare un po 'di codice ... – Jakub
Si avrà probabilmente bisogno di creare un nuovo oggetto PDO per la connessione a un altro database. – Ignas
Puoi usare 'selezionare table.field da database.table', assumendo che qualsiasi ID utente con cui ti sei connesso abbia i diritti appropriati sugli altri db/tabelle. –