尝试使用 PDO 连接到错误的数据库时 PHP 不显示错误
Posted
技术标签:
【中文标题】尝试使用 PDO 连接到错误的数据库时 PHP 不显示错误【英文标题】:PHP Does not show errors when trying to connect to a wrong database using PDO 【发布时间】:2015-06-20 19:12:06 【问题描述】:我对 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);
非常感谢您的帮助,我敢肯定这可能是一件非常愚蠢的事情,但老实说我无法弄清楚。
【问题讨论】:
$conn->errorInfo()
告诉你什么?
您是否尝试过查看 Apache 错误日志?
@RyanVincent 请继续发布这个作为答案。
【参考方案1】:
这变成了一个很难找到和解释的错误,尽管它很简单。
问题是 dsn 字符串不正确。
当前值:'mysql:127.0.0.1;dbname=myDb'
应该是:'mysql:host=127.0.0.1;dbname=myDB'
注意:host=
不见了。
但是,PDO 没有正确验证 dsn 参数字符串,并且连接到 Localhost 数据库没有任何错误。
但是,它忽略了 dbname
参数,因此当您尝试查询时,您会收到以下错误:1046 No database selected'
em>。
澄清正在发生的事情(参见下面的 Alfredo Delgado):
PDO 完全忽略了格式错误的参数,并假设 Localhost
数据库是您想要的。 ;-/
正如阿尔弗雷多·德尔加多所说:
...“在 dsn 中没有 host= 的结果是 PDO 默默地默认为 localhost。由于我碰巧有数据库的本地副本,所以我浪费了几个小时来追逐诸如权限之类的红鲱鱼。”
【讨论】:
这也与 PDO 的“其他问题”有关“PDO::ATTR_EMULATE_PREPARES, false”。它阻止了某些版本的 PHP 和 PDO 引发的异常。我需要检查以后的版本。 see 我今天遇到了这个问题。在 dsn 中没有 host= 的结果是 PDO 默默默认为 localhost。由于我碰巧有数据库的本地副本,因此我浪费了数小时来寻找权限之类的红鲱鱼。 @AlfredoDelgado,我很同情你。 ;-/ 由于错误报告不正确,它确实是一个惊人的“时间汇”,试图找出并解释实际错误。 .更新了答案。 @RyanVincent,是的,我确实有“空格”,但是在 PHP 编程中的那些特定位置是否考虑了空格? @RyanViçeñte,哦,是的,我可以从 PHPMyAdmin 访问数据库!以上是关于尝试使用 PDO 连接到错误的数据库时 PHP 不显示错误的主要内容,如果未能解决你的问题,请参考以下文章