如何select一个MySQL数据库与PHP中的PDO一起使用?

我想在PHP PDO对象创build完成后select一个MySQL数据库。 我该怎么做呢?

// create PDO object and connect to MySQL $dbh = new PDO( 'mysql:host=localhost;', 'name', 'pass' ); // create a database named 'database_name' // select the database we just created ( this does not work ) $dbh->select_db( 'database_name' ); 

有没有相当于mysqli :: select_db的PDO?

也许我试图不正确地使用PDO? 请帮忙或解释。

编辑

我不应该使用PDO来创build新的数据库吗? 我明白,使用PDO的大部分好处都会在一个很less使用的操作中丢失,这个操作不会像CREATE DATABASE那样插入数据,但是使用不同的连接来创build数据库似乎很奇怪,然后创build一个PDO连接来使其他调用。

通常,您可以在连接时在DSN中指定数据库。 但是如果你正在创build一个新的数据库,显然你不能在创build数据库之前指定这个数据库。

您可以USE语句更改您的默认数据库:

 $dbh = new PDO("mysql:host=...;dbname=mysql", ...); $dbh->query("create database newdatabase"); $dbh->query("use newdatabase"); 

随后的CREATE TABLE语句将在您的新数据库中创build。


来自@Mike的评论:

当你像这样切换数据库时,似乎强制PDO模拟准备好的语句。 将PDO :: ATTR_EMULATE_PREPARES设置为false,然后尝试使用另一个数据库将失败。

我只是做了一些testing,我没有看到发生。 更改数据库只发生在服务器上,并不会改变客户端中PDOconfiguration的任何内容。 这是一个例子:

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

如果你说的是真的,那么这应该没有错误的工作。 只有在PDO :: ATTR_EMULATE_PREPARES为真时,PDO才能多次使用给定的命名参数。 所以,如果你说这个属性被设置为true,作为改变数据库的副作用,那么它应该工作。

但它不起作用 – 它会得到一个错误“无效的参数号”,表示非模拟的预处理语句保持有效。

在PHP PDO对象已经被创build为我的代码之后,你可以迷恋地select一个MySQL数据库来使用它

用USE STATEMENT ..但是请记住这里USE STATEMENT是mysql命令

 try { $conn = new PDO("mysql:host=$servername;", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->exec("use databasename"); //application logic //....... //application logic } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; 

我希望我的代码对请求有帮助

您应该在创buildPDO对象时设置数据库。 一个例子(从这里 )

 <?php $hostname = "localhost"; $username = "your_username"; $password = "your_password"; try { $dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password); echo "Connected to database"; // check for connection } catch(PDOException $e) { echo $e->getMessage(); } ?> 

据我所知,你必须为每个连接创build一个新的对象。 您始终可以使用连接到多个数据库的方法来扩展PDO类。 然后,如你所愿地使用它:

 public function pickDatabase($db) { if($db == 'main') { return $this->db['main']; //instance of PDO object else return $this->db['secondary']; //another instance of PDO object } 

并使用它像$yourclass->pickDatabase('main')->fetchAll('your stuff');