我想在已经创建PHP PDO对象后选择要使用的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' );
Run Code Online (Sandbox Code Playgroud)
是否有一个等效于mysqli :: select_db的PDO?
也许我正在尝试不正确地使用PDO?请帮忙或解释.
编辑
我不应该使用PDO来创建新数据库吗?我知道使用PDO的大部分好处都会丢失在很少使用的不插入数据的操作上CREATE DATABASE,但是必须使用不同的连接来创建数据库,然后创建PDO连接以进行其他调用似乎很奇怪.
Bil*_*win 49
通常,您在连接时将在DSN中指定数据库.但是,如果您正在创建新数据库,显然您无法在创建DSN之前将该数据库指定为该数据库.
您可以使用以下USE语句更改默认数据库:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE将在您的新数据库中创建后续语句.
来自@Mike的评论:
当您切换数据库时,它似乎强制PDO模拟预准备语句.将PDO :: ATTR_EMULATE_PREPARES设置为false然后尝试使用其他数据库将失败.
我刚做了一些测试,但我没有看到这种情况发生.更改数据库只发生在服务器上,并且它不会改变客户端中PDO配置的任何内容.这是一个例子:
<?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));
Run Code Online (Sandbox Code Playgroud)
如果你说的是真的,那么这应该没有错误.仅当PDO :: ATTR_EMULATE_PREPARES为true时,PDO才能多次使用给定的命名参数.因此,如果你说这个属性设置为true作为更改数据库的副作用,那么它应该工作.
但它不起作用 - 它会收到错误"无效参数编号",表示未仿真的预准备语句仍然有效.
| 归档时间: |
|
| 查看次数: |
47862 次 |
| 最近记录: |