sql >> Database teknologi >  >> RDS >> Mysql

Hvordan vælger jeg en MySQL-database til brug med PDO i PHP?

Typisk vil du angive databasen i DSN, når du opretter forbindelse. Men hvis du opretter en ny database, kan du naturligvis ikke angive databasens DSN, før du opretter den.

Du kan ændre din standarddatabase med USE erklæring:

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

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

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

Efterfølgende CREATE TABLE udsagn vil blive oprettet i din nye database.

Rekommentar fra @Mike:

Jeg har lige lavet nogle test, og det kan jeg ikke se ske. Ændring af databasen sker kun på serveren, og det ændrer ikke noget ved PDO's konfiguration i klienten. Her er et eksempel:

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

Hvis det, du siger, er sandt, burde dette fungere uden fejl. PDO kan kun bruge en given navngivet parameter mere end én gang, hvis PDO::ATTR_EMULATE_PREPARES er sand. Så hvis du siger, at denne attribut er sat til sand som en bivirkning af at ændre databaser, så burde den virke.

Men det virker ikke -- det får fejlen "Ugyldigt parameternummer", som indikerer, at ikke-emulerede forberedte sætninger forbliver i kraft.



  1. Genforbindelse på MySQL-serveren er gået væk

  2. Der er noget galt med Hibernate DB-forbindelsespooler c3p0

  3. Returner rækker i den nøjagtige rækkefølge, de blev indsat

  4. Den nemmeste måde at konvertere en Blob til en byte-array