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

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

作者:互联网

我对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);

在此先感谢您的帮助,我敢肯定这可能是一件很愚蠢的事情,但老实说我无法弄清楚.

解决方法:

尽管这很简单,但却变成了一个棘手的错误,难以找到和解释.

问题是dsn字符串不正确.

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

它应该是:’mysql:host = 127.0.0.1; dbname = myDB’注意:host =丢失.

但是,PDO无法正确验证dsn参数字符串,并且连接到Localhost数据库时不会出现任何错误.

但是,它已忽略了dbname参数,因此,当您尝试查询时,将收到错误消息:1046未选择数据库.

澄清正在发生的事情(请参见下面的Alfredo Delgado):
   PDO完全忽略格式错误的参数,并假定您要使用Localhost数据库. ;-/

正如阿尔弗雷多·德尔加多(Alfredo Delgado)所述:

…“在dsn中没有host =的结果是,PDO默默地默认为localhost.由于我碰巧拥有数据库的本地副本,所以我浪费了很多时间来追逐诸如权限之类的红色鲱鱼.”

标签:error-reporting,mysql,php,pdo
来源: https://codeday.me/bug/20191028/1952632.html