Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wybrać bazę danych MySQL do użycia z PDO w PHP?

Zazwyczaj podczas łączenia określasz bazę danych w DSN. Ale jeśli tworzysz nową bazę danych, oczywiście nie możesz określić DSN tej bazy danych przed jej utworzeniem.

Możesz zmienić domyślną bazę danych za pomocą USE oświadczenie:

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

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

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

Kolejne CREATE TABLE wyciągi zostaną utworzone w nowej bazie danych.

Ponownie komentarz od @Mike:

Właśnie zrobiłem kilka testów i nie widzę, żeby tak się działo. Zmiana bazy danych odbywa się tylko na serwerze i nie zmienia nic w konfiguracji PDO w kliencie. Oto przykład:

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

Jeśli to, co mówisz, jest prawdą, to powinno działać bezbłędnie. PDO może użyć danego nazwanego parametru więcej niż jeden raz tylko wtedy, gdy PDO::ATTR_EMULATE_PREPARES ma wartość true. Więc jeśli mówisz, że ten atrybut jest ustawiony na true jako efekt uboczny zmiany baz danych, to powinno działać.

Ale to nie działa — pojawia się błąd „Nieprawidłowy numer parametru”, który wskazuje, że nieemulowane przygotowane instrukcje pozostają w mocy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić zestaw znaków i sortowanie bazy danych w MySQL?

  2. szyfrowanie Mysql / przechowywanie wrażliwych danych,

  3. Transpozycja Big Query

  4. Mysql:wykonanie polecenia odrzuconego użytkownikowi ''@'localhost' z powodu rutynowego błędu

  5. błąd 1064(42000) podczas próby wykonania polecenia mysqldump