【问题标题】:What diffrence does a space between dbname and = does in PDOPDO 中 db name 和 = 之间的空格有什么区别
【发布时间】:2025-12-12 12:35:01
【问题描述】:

这是我尝试连接数据库时的代码。我故意给出了错误的数据库名称。

<?php
   try 
    {
        $pdo = new PDO('mysql:host=localhost;dbname=ehrp', 'root', '');

    }   

        catch (PDOException $e) 
    {
        echo $e->getMessage();

    }

?>

这是我得到的例外,这很好: SQLSTATE[HY000] [1049] 未知数据库 'ehrp'

但是当我写这个时: $pdo = new PDO('mysql:host=localhost;dbname =ehrp', 'root', '');

注意 dbname 和 = 我在屏幕上什么也没有看到之间有一个空格。没有显示错误。 这是为什么?

【问题讨论】:

  • 这实际上是您的所有代码,还是您将其包含在更大的代码中? (即你显示的代码是真的minimal reproducible example吗?)
  • 不只是这么多。
  • SHOW DATABASES; 执行这个查询并告诉我你是否找到了你的数据库ehrp
  • 您在哪里查看错误?在浏览器中?如果是这样,您不会期望在第二种情况下看到错误(其中包含空格),因为这将是致命的。

标签: php


【解决方案1】:

您传递给 PDO 构造函数的参数是 URI 形式,并且 URI 不能包含任意空格,它们都有意义。因此,据您所知,您实际提供的 PDO 构造函数是mysql:host=localhost;,后跟一个名为“database”的分配属性(末尾有一个空格)。由于 PDO 对名为“数据库”的属性一无所知,因此没有错误(这是合法的 URI 属性值分配),并且作为未知属性,它只是被忽略。没有错误,没有警告,你没有做错任何事,PDO 会按照你的要求去做。

在 localhost 上与您的服务器的 PDO 连接成功,您现在有一个已连接的 PDO 实例,只是尚未绑定到特定数据库。

要验证这一点,请使用您的 PDO 对象准备一个 SELECT DATABASE() 语句,然后执行它:它应该可以正常工作,并返回一个表明您尚未连接到数据库的响应。

【讨论】: