SQL查询用户名和密码

时间:2014-03-31 22:48:21

标签: sql perl

我正在为一个班级制作一个项目网站,但不明白为什么我会收到这个错误。 到目前为止我有 Bareword找到了运营商在user-login.cgi第14行的预期位置,靠近"来自usr的用户名"同样的错误和同一行" $ username AND" 我找不到任何有用的搜索。如果有人可以提供帮助,我们非常感谢

$username = $formdata{'username'};
$password = $formdata{'password'};
$msp = "password";
$msdb = "databasename";
$msusr = "usrname";
$dbh = DBI ->connect("DBI:mysql:$msdb", "$msusr", "$msp");
$check_user = $dbh->selectrow_array(select username from usr WHERE email = $username AND usrpswrd = crypt $password, codetype);

这是perl在检查代码时得到的并给出错误

3 个答案:

答案 0 :(得分:2)

你应该用撇号封装你的sql。像这样:

$check_user = $dbh->selectrow_array("select username from usr WHERE email = $username AND usrpswrd = crypt $password",...

(实际上这个crypt $密码看起来并不好......你应该选择绑定变量而不是用来自用户内部的输入创建一个大的查询字符串。这可能是一个可能的安全漏洞。(搜索sql注入。))

答案 1 :(得分:2)

一些问题:

因此会建议这些变化(未经测试):

use strict;
use warnings;

...

my $msp = "password";
my $msdb = "databasename";
my $msusr = "usrname";
my $dbh = DBI->connect("DBI:mysql:$msdb", "$msusr", "$msp")
     or die "DB connect failed: $DBI::errstr";

my $username = $formdata{'username'};
my $password = $formdata{'password'};

my $sth = $dbh->prepare(q{select username from usr WHERE email=? AND usrpswrd=?});
$sth->execute($username, crypt($password)) or die $dbh->errstr;
my ($check_user) = $sth->fetchrow_array;

答案 2 :(得分:0)

你需要引用选择

"select username from usr WHERE email = '$username' 
    AND usrpswrd = '" . crypt($password)  . "'"

您还想添加

use strict;
use warnings;

位于脚本顶部