我正在尝试将CGI与DBI集成。 我从cgi中获取结果并将其添加到DBI中。 但是cgi脚本无法连接到DBI。 脚本如下所述。 该脚本无法与DBI连接,因为它在连接阶段失败。
use CGI qw/:standard/;
use Apache::DBI;
use DBI ;
my $driver = "mysql";
my $database = "testdb";
my $dsn = "DBI:mysql:testdb";
my $userid = "testuser";
my $password = "test123";
print
header,
start_html('Simple Script'),
h1('Simple Script'),
start_form,
"What's your First name? ",textfield('First name'),p,
"What's your Last name? ",textfield('Last name'),p,
"What's your Age? ",textfield('Age'),p,
"What's your Income? ",textfield('Income'),p,
popup_menu(-name=>'Sex',
-values=>['Male','Female']),p,
submit,
end_form,
hr,"\n";
if (param) {
my $FIRST_NAME=em(param('First name')) ;
my $LAST_NAME=em(param('Last name')) ;
my $AGE=em(param('Age')) ;
my $INCOME=em(param('Income')) ;
my $SEX =em(param('Sex')) ;
print
$FIRST_NAME ,p,
$LAST_NAME,p,
$SEX,p,
$AGE,p,
$dsn,p
$INCOME ;
my $dbh = DBI->connect($dsn,"root","" ) or die "Can't connect: ",$DBI::errstr;
my $stmt ;
my $sql = "INSERT INTO TEST_TABLE (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME ) values (?,?, ?, ?, ?)";
my $stmt = $dbh->prepare($sql);
$stmt->execute($FIRST_NAME,$LAST_NAME, $SEX, $AGE, $INCOME) or die $DBI::errstr;
}
print end_html;
答案 0 :(得分:2)
这里没有足够的信息给你答案。特别是,如果我们不知道错误是什么,我们就无法解决问题所在。你说没有错误信息。这是不太可能的,因为如果连接失败,您的代码将显式消失并显示错误消息。这给我们留下了两种可能性:
让我们假设它是第二种选择。也许您没有意识到CGI程序故意不向浏览器发送错误消息(这是一个安全功能,您不应该尝试更改它),并且您需要查看Web服务器错误日志。 / p>
您可以通过以下三种方式查看错误消息。
use CGI::Carp 'fatalsToBrowser';
添加到您的代码中。还记得上面我说过你不应该改变CGI错误没有写入浏览器的事实吗?好吧,这就是你如何覆盖它。这是一个可怕的想法,我真的不推荐它(主要是因为你应该在将代码投入生产之前将其删除 - 并且每个人都会忘记这一点,并在他们的Web服务器中留下一个巨大的安全漏洞!)但它可以工作在极端情况下,您实际上无法找到错误日志的位置,并且您不知道如何使用命令行。因此,其中一种方法会告诉您错误是什么。如果你编辑你的问题以添加重要的细节,那么我相信这里的某个人将能够帮助你解决问题。
其他一些提示:
<p>
元素是容器,而不是分隔符。