sql >> Databasteknik >  >> RDS >> Mysql

Hur väljer jag en MySQL-databas att använda med PDO i PHP?

Vanligtvis skulle du ange databasen i DSN när du ansluter. Men om du skapar en ny databas kan du uppenbarligen inte ange den databasens DSN innan du skapar den.

Du kan ändra din standarddatabas med USE uttalande:

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

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

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

Efterföljande CREATE TABLE uttalanden kommer att skapas i din nya databas.

Om kommentar från @Mike:

Jag gjorde bara några tester och jag ser inte att det händer. Att ändra databasen sker bara på servern, och det ändrar ingenting i PDO:s konfiguration i klienten. Här är ett exempel:

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

Om det du säger är sant, bör detta fungera utan fel. PDO kan endast använda en given namngiven parameter mer än en gång om PDO::ATTR_EMULATE_PREPARES är sant. Så om du säger att det här attributet är satt till sant som en bieffekt av att ändra databaser, så borde det fungera.

Men det fungerar inte -- det får ett felmeddelande "Ogiltigt parameternummer" som indikerar att icke-emulerade förberedda satser fortfarande gäller.



  1. Steg för att synkronisera Standby med primär databas i Oracle

  2. Förstå flera kolumnindex i MySQL-fråga

  3. Hur man tolkar PosgreSQL txid_current() värde

  4. Infoga/visa bild i/från en MySQL DB