当前位置: 首页 > 面试题库 >

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

韦昊焜
2023-03-14
问题内容

我想在创建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的评论:

当您像这样切换数据库时,似乎会强制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));

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

但这不起作用-会收到错误消息“无效的参数号”,该错误指示未模拟的准备好的语句仍然有效。



 类似资料:
  • 问题内容: 我正在使用PDO来执行一条语句,该语句使用将数组作为其值的子句: 上面的代码工作得很好,但是我的问题是为什么不能: 此代码将返回等于(1)中第一项的项目,但不返回数组(2和3)中的其余项目。 问题答案: PDO不适用于此类情况。您需要动态创建带有问号的字符串并将其插入查询中。 如果查询中还有其他占位符,则可以使用以下方法(代码取自我的PDO教程): 您可以使用函数将所有变量连接到单个数

  • 问题内容: 我不尝试使用循环。我只是从一行的一列中获取一个值。通过以下代码,我得到了想要的东西,但是使用PDO必须有一种更简单的方法。 看起来好像太多行无法从数据库中获得一个值。:\ 问题答案: 您可以为此创建一个函数,并在每次需要单个值时调用该函数 然后,您可以简单地执行以下操作: 因此,您只需创建一次该函数,即可将其重新用于具有不同列名的不同表。 社区编辑: 出于安全原因,请避免将字符串连接以

  • 问题内容: 我对使用MYSQL的PDO有点陌生,这是我的两个文件: 我有一个用于连接数据库的连接类: 我有一个account_info类,用于查询数据库中的数据: 我在index.php页面中都包含了这两个文件: 我只是无法使其正常工作,我没有任何输出,我认为它与示波器有关,但是由于我是PDO和OOP的新手,所以我不知道为什么要修复它的正确方法。提前致谢。 问题答案: 解决方案1 替换为 更换 与

  • 问题内容: 我试图连接到我的数据库,当我运行代码时,出现错误。谁能告诉我我的PHP代码有什么错误和错误吗?谢谢。 PHP代码: .conf.php 文件: 问题答案: 除非您输入的密码不正确并且需要解决,否则运行一条语句来授予对数据库用户的访问权限: 以上授予所有特权。通常最好只限制需要的内容。例如,如果您仅打算选择而不是修改数据, 更新资料 由于您将数据库名称标识为,因此将调用更改为: 之后,由

  • 本文向大家介绍php使用PDO操作MySQL数据库实例,包括了php使用PDO操作MySQL数据库实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php使用PDO操作MySQL数据库的方法。分享给大家供大家参考。具体分析如下: PDO是mysql数据库操作的一个公用类,我们不需要进行自定类就可以直接使用pdo来操作数据库,但是在php默认配置中pdo是未开启所以我们必须先在php.in

  • 我有下表 我的表格 id|col1|col2|col3|col4|col5 我使用的是spring数据。我有以下存储库/DAO类 我想取一些列,比如在一个道号中我想取col1和col2,在另一个道号中我想取col1、col3、col5等等... 我想要