gpt4 book ai didi

php - 如何在 PHP 中选择要与 PDO 一起使用的 MySQL 数据库?

转载 作者:IT老高 更新时间:2023-10-28 13:00:04 25 4
gpt4 key购买 nike

我想在创建 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' );

是否有等效于 mysqli::select_db 的 PDO?

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

编辑

我不应该使用 PDO 创建新数据库吗?我知道使用 PDO 的大部分好处都在一个很少使用的操作上丢失了,它不插入像 CREATE DATABASE 这样的数据,但是必须使用不同的连接来创建数据库似乎很奇怪,然后创建 PDO 连接以进行其他调用。

最佳答案

通常您会在连接时在 DSN 中指定数据库。但是,如果您正在创建一个新数据库,显然您不能在创建之前将该数据库指定为 DSN。

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

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

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

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

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


@Mike 的回复:

When you switch databases like that it appears to force PDO to emulate prepared statements. Setting PDO::ATTR_EMULATE_PREPARES to false and then trying to use another database will fail.

我只是做了一些测试,但我没有看到这种情况发生。更改数据库只发生在服务器上,它不会更改客户端中 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));

如果你说的是真的,那么这应该可以正常工作。只有当 PDO::ATTR_EMULATE_PREPARES 为真时,PDO 才能多次使用给定的命名参数。因此,如果您说此属性设置为 true 作为更改数据库的副作用,那么它应该可以工作。

但它不起作用——它得到一个错误“无效的参数号”,这表明非模拟的准备好的语句仍然有效。

关于php - 如何在 PHP 中选择要与 PDO 一起使用的 MySQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com