【发布时间】:2019-05-14 03:08:25
【问题描述】:
我正在尝试使用输入到用户中的一些新值来更新我的 sql 表。由于某种原因,sql 命令没有更新我的数据库。我得到了我验证的正确值。这是我的代码
#!/usr/bin/perl
#This is going to be the user login check and will set a cookie
use DBI;
use CGI qw(:standard);
use strict;
#Connection error
sub showErrorMsgAndExit {
print header(), start_html(-title=>shift);
print (shift);
print end_html();
exit;
}
#Connecting to the database
my $dbUsername = "root";
my $dbPassword = "password";
my $dsn = "DBI:mysql:f18final:localhost";
my $dbh = DBI->connect($dsn, $dbUsername, $dbPassword, {PrintError => 0});
#error checking
if(!$dbh) {
print header(), start_html(-title=>"Error connecting to DB");
print ("Unable to connec to the database");
print end_html();
exit;
}
print header;
print start_html(-title=>'Add Classes');
#Get the information the user entered
my $id = param('classid');
my $className = param('classname');
my $department = param('department');
my $classnum = param('classnum');
my $grade = param('grade');
my $credits = param('credit');
print "$id $className, $department, $classnum, $grade, $credits";
#first sql check to see if username is already taken
my $check = "UPDATE tblclasses(classname, department, classnum, grade, credits) VALUES (?, ?, ?, ?, ?) WHERE classID = $id";
my $sth = $dbh->prepare($check);
$sth->execute($className, $department, $classnum, $grade,$credits);
print "<h1>Success</h1>";
print "<form action=http://localhost/cgi-bin/edit.pl method = 'post'>";
print "<input type = 'submit' name = 'submit' value = 'Update Another'>";
print "</form>";
print "<form action=http://localhost/cgi-bin/actions.pl method = 'post'>";
print "<input type = 'submit' name = 'submit' value = 'Back to actions'>";
print "</form>";
print end_html();
exit;
当我尝试在 mysql 工作台中运行 sql 命令时,它成功地更新了行。我的问题是什么?
【问题讨论】:
-
您需要在 DBI 构造函数中设置 RaiseError => 1 以便将错误作为您可以在日志中看到的异常抛出(简单选项),或者自己检查每个
connect的错误和prepare和execute以及 DBI 文档中描述的其他 DBI 调用。 -
以防万一这是一个新项目而您不知道,much better alternatives to CGI.pm 甚至仅用于 CGI 脚本。否则请随意忽略此评论。