为什么这段代码会无声地失败?我如何让它向我展示SQL错误究竟是什么?
$dbh=DBI->connect($db_name,$db_user,$db_pass);
我将代码修改为如下所示:
$dbh=DBI->connect($db_name,$db_user,$db_pass)
or die("could not connect to db: $db_name");
而不是允许我使用$dbh
未分配,它会按预期失败,但它并没有告诉我它为什么失败。就我所见,$db_name
等的值都设置为有效值。
我知道真正的错误(MySQL服务器实际上没有运行)但是为了将来的参考,我希望看到真正的错误,例如我导致auth失败的情况。
答案 0 :(得分:8)
你没有看到connect
失败的原因,因为你没有做DBI给你做的事情。错误将出现在$DBI::errstr
变量中:
$dbh = DBI->connect($data_source, $username, $password)
or die $DBI::errstr;
确保您阅读了要使用的任何功能或方法的文档。 :)
答案 1 :(得分:2)
啊哈,错误存储在$DBI::errstr
中,所以我可以这样修改我的代码:
$dbh=DBI->connect($db_name,$db_user,$db_pass)
or die("could not connect to db: $DBI::errstr");
根据文档,它在设计上无声地失败。
答案 2 :(得分:1)
Pass RaiseError =>连接时作为选项1,那么您的脚本将因错误而死亡。我的Perl商店有一个标准配置:
{
RaiseError => 1,
PrintError => 0,
AutoCommit => 1,
mysql_auto_reconnect => 1,
}
答案 3 :(得分:1)
这是我对rjh's answer的使用。我认为我比die
方法更喜欢这个,但还不确定......
$dbh = DBI->connect($data_source, $username, $password, { RaiseError => 1 });
答案 4 :(得分:0)
您使用'或'是语法错误。列出的代码根本不应运行。
你想:
$dbh=DBI->connect($db_name,$db_user,$db_pass)
or die("could not connect to db: $db_name");
请注意or die...
是原始陈述的一部分,而不是新陈述。
答案 5 :(得分:0)
尝试包含$的值!在你的消息中。
$dbh = DBI->connect($db_name, $db_user, $db_pass)
or die("could not connect to db ($db_name): $!");