Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie wähle ich eine MySQL-Datenbank zur Verwendung mit PDO in PHP aus?

Normalerweise würden Sie die Datenbank im DSN angeben, wenn Sie eine Verbindung herstellen. Aber wenn Sie eine neue Datenbank erstellen, können Sie diese Datenbank natürlich nicht mit dem DSN angeben, bevor Sie sie erstellen.

Sie können Ihre Standarddatenbank mit USE ändern Aussage:

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

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

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

Anschließend CREATE TABLE Anweisungen werden in Ihrer neuen Datenbank erstellt.

Erneuter Kommentar von @Mike:

Ich habe gerade einige Tests gemacht und ich sehe das nicht. Das Ändern der Datenbank erfolgt nur auf dem Server und ändert nichts an der PDO-Konfiguration im Client. Hier ist ein Beispiel:

<?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));

Wenn das stimmt, was Sie sagen, sollte dies ohne Fehler funktionieren. PDO kann einen bestimmten benannten Parameter nur dann mehr als einmal verwenden, wenn PDO::ATTR_EMULATE_PREPARES wahr ist. Wenn Sie also sagen, dass dieses Attribut als Nebeneffekt des Änderns von Datenbanken auf „true“ gesetzt wird, dann sollte es funktionieren.

Aber es funktioniert nicht – es wird ein Fehler „Ungültige Parameternummer“ angezeigt, der darauf hinweist, dass nicht emulierte vorbereitete Anweisungen in Kraft bleiben.