微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试使用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.由于我碰巧拥有数据库的本地副本,所以我浪费了很多时间来追逐诸如权限之类的红色鲱鱼.”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐