PHP尝试使用PDO连接到错误的数据库时不显示错误

时间:2015-04-15 00:54:35

标签: php mysql pdo error-reporting

我对PHP很陌生,我有一个非常基本的问题,尽管在论坛中查看了类似的问题,但我还没有找到解决方案。

我正在尝试通过PDO将PHP与我的数据库(MySQL)连接起来。如果我输入错误的用户名或密码,php确实在浏览器中显示错误,但如果输入错误的数据库名称,则不会退出任何错误。这怎么可能?我的代码如下:

<?php
try{
    $conn = new PDO('mysql:127.0.0.1;dbname=myDb','root','root');
    $conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOexception $e){
    echo 'wrong credentials';
}

我的php.ini文件配置为显示错误,Apache在使用以下值修改后重新启动:

error_reporting  =  E_ALL | E_STRICT
display_errors = On
display_startup_errors = On
log_errors = On

我还尝试在脚本开头使用以下代码,但它仍然没有显示与错误的数据库名称相关的错误

ini_set('display_errors', 1);
error_reporting(~0);

非常感谢你的帮助,我确信这可能是一个非常愚蠢的事情,但老实说我无法理解。

1 个答案:

答案 0 :(得分:4)

这变成了一个非常棘手的错误,即使它非常简单,也可以找到并解释。

问题是 dsn 字符串不正确。

当前值: 'mysql:127.0.0.1;dbname=myDb'

应该是: 'mysql:host=127.0.0.1;dbname=myDB' 注意: host= 缺失。

但是,PDO无法正确验证 dsn 参数字符串,连接到Localhost数据库时没有任何错误

但是,忽略了 dbname 参数,因此当您尝试查询时,会出现以下错误: {{1 }}

澄清正在发生的事情(参见下面的Alfredo Delgado):    PDO完全忽略了格式错误的参数,并假设1046 No database selected'数据库是您想要的。 ; - /

正如阿尔弗雷多·德尔加多所说:

...&#34;在dsn中没有host =的结果是PDO默默地默认为localhost。因为我碰巧有DB的本地副本,所以我浪费了几个小时来追逐权限等红色鲱鱼。&#34;