Php PDO不会向错误主机显示警报

Php PDO不会向错误主机显示警报,php,pdo,Php,Pdo,我最近错过了PDO语法,花了几个小时才弄清楚错误是什么。页面上未报告任何错误。这不是为了迎合教规 在这些情况下,如何显示错误 我曾经 new PDO ("mysql:localhost; dbname=crud", "root", ""); 当正确的一个是 new PDO ("mysql:host=localhost; dbname=crud", "root", ""); 是的,我有 ini_set ('error_reporting', E_ALL); ini_set ('display_

我最近错过了PDO语法,花了几个小时才弄清楚错误是什么。页面上未报告任何错误。这不是为了迎合教规

在这些情况下,如何显示错误

我曾经

new PDO ("mysql:localhost; dbname=crud", "root", "");
当正确的一个是

new PDO ("mysql:host=localhost; dbname=crud", "root", "");
是的,我有

ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', 1);
激活和条件

try {} catch (PDOException $ e) {}

即使这样,也不会显示错误。

PDO具有默认的无提示模式(
PDO::ERRMODE_silent
)。这意味着它不会在坏连接上抛出异常。 因此,您需要将其属性模式设置为抛出异常:

try {

    $dbh = new PDO ("mysql:localhost; dbname=crud", "root", "");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $e) {

    echo 'Bad Connection. Error: ' . $e->getMessage();

}

此处的更多详细信息:

确保您已设置
ini\u集(“错误报告”,全部)
ini_集('display_errors','on')否则将显示空白页。构造函数应在连接到指定数据库失败时引发异常。在这种情况下,您需要使用块来处理错误,因为它的可能副本不是重复的。即使使用这些设置,也不会显示错误。您必须确保
ini\u集(“错误报告”,E\u ALL);ini设置(“显示错误”,1)都位于要应用它们的
new\PDO()
行上方。根据,您应该立即看到
SQLSTATE[HY000][2002]
异常,因为在使用
$PDO->setAttribute()之前必须调用
新的PDO
。否则,禁用这两个选项后,您将不会看到任何错误,并且默认情况下,
PDO::\u构造确实会引发异常,因此从不调用
::setAttribute
::setAttribute(PDO::ATTR_ERRMODE)
适用于来自PDO实例对象的所有其他方法调用,例如
->prepare()