Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como seleciono um banco de dados MySQL para usar com PDO em PHP?


Normalmente, você especificaria o banco de dados no DSN ao se conectar. Mas se você estiver criando um novo banco de dados, obviamente não poderá especificar o DSN desse banco de dados antes de criá-lo.

Você pode alterar seu banco de dados padrão com o USE demonstração:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);

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

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

Subseqüente CREATE TABLE instruções serão criadas em seu novo banco de dados.

Comentário de @Mike:

Acabei de fazer alguns testes e não vejo isso acontecendo. A alteração do banco de dados ocorre apenas no servidor, e não altera em nada a configuração do PDO no cliente. Aqui está um exemplo:
<?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 o que você está dizendo é verdade, isso deve funcionar sem erros. O PDO pode usar um determinado parâmetro nomeado mais de uma vez somente se PDO::ATTR_EMULATE_PREPARES for true. Portanto, se você está dizendo que esse atributo está definido como true como um efeito colateral da alteração de bancos de dados, deve funcionar.

Mas não funciona -- ele recebe um erro "Número de parâmetro inválido" que indica que as instruções preparadas não emuladas permanecem em vigor.