SQL查询用户名和密码

SQL查询用户名和密码,sql,perl,Sql,Perl,我正在为一个班级制作一个项目站点,但不明白为什么我会出现这个错误。 到目前为止我有 Bareword在user-login.cgi第14行的“usr用户名”附近找到了操作员期望的位置,也有相同的错误和相同的行“$username和” 我找不到任何有用的搜索。如果有人能帮忙,我们将不胜感激 $username = $formdata{'username'}; $password = $formdata{'password'}; $msp = "password"; $msdb = "databas

我正在为一个班级制作一个项目站点,但不明白为什么我会出现这个错误。 到目前为止我有 Bareword在user-login.cgi第14行的“usr用户名”附近找到了操作员期望的位置,也有相同的错误和相同的行“$username和” 我找不到任何有用的搜索。如果有人能帮忙,我们将不胜感激

$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在检查代码时得到的结果,并给出错误

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

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

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

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

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

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

你需要引用select

"select username from usr WHERE email = '$username' 
    AND usrpswrd = '" . crypt($password)  . "'"
您还想添加

use strict;
use warnings;

在脚本顶部

您需要引用选择

"select username from usr WHERE email = '$username' 
    AND usrpswrd = '" . crypt($password)  . "'"
您还想添加

use strict;
use warnings;
在脚本的顶部,有几个问题:

  • 始终在每个脚本的顶部包含和
  • 您需要将SQL语句括在引号中。我建议使用
  • 您不应该在sql语句中包含变量
  • 连接到数据库和执行sql查询时,不要忘记:
  • 因为你正在使用,别忘了把作业的左边列成一个清单
因此,建议进行以下更改(未测试):

几个问题:

  • 始终在每个脚本的顶部包含和
  • 您需要将SQL语句括在引号中。我建议使用
  • 您不应该在sql语句中包含变量
  • 连接到数据库和执行sql查询时,不要忘记:
  • 因为你正在使用,别忘了把作业的左边列成一个清单
因此,建议进行以下更改(未测试):