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

2023-04-08php开发问题
3

本文介绍了如何在 PHP 中选择要与 PDO 一起使用的 MySQL 数据库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我想在创建 PHP PDO 对象后选择要使用的 MySQL 数据库.我该怎么做?

I want to select a MySQL database to use after a PHP PDO object has already been created. How do I do this?

// 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?

Is there a PDO equivalent to mysqli::select_db?

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

Perhaps I'm trying to use PDO improperly? Please help or explain.

编辑

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

Should I not be using PDO to create new databases? I understand that the majority of benefits from using PDO are lost on a rarely used operation that does not insert data like CREATE DATABASE, but it seems strange to have to use a different connection to create the database, then create a PDO connection to make other calls.

推荐答案

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

Typically you would specify the database in the DSN when you connect. But if you're creating a new database, obviously you can't specify that database the DSN before you create it.

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

You can change your default database with the USE statement:

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

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

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

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

Subsequent CREATE TABLE statements will be created in your newdatabase.

来自@Mike 的重新评论:

Re comment from @Mike:

当您像这样切换数据库时,它似乎会强制 PDO 模拟准备好的语句.将 PDO::ATTR_EMULATE_PREPARES 设置为 false,然后尝试使用其他数据库将失败.

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 配置的任何内容.举个例子:

I just did some tests and I don't see that happening. Changing the database only happens on the server, and it does not change anything about PDO's configuration in the client. Here's an example:

<?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 作为更改数据库的副作用,那么它应该可以工作.

If what you're saying is true, then this should work without error. PDO can use a given named parameter more than once only if PDO::ATTR_EMULATE_PREPARES is true. So if you're saying that this attribute is set to true as a side effect of changing databases, then it should work.

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

But it doesn't work -- it gets an error "Invalid parameter number" which indicates that non-emulated prepared statements remains in effect.

这篇关于如何在 PHP 中选择要与 PDO 一起使用的 MySQL 数据库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17