繁体   English   中英

为什么我用此Perl代码得到错误500?

[英]why do i get error 500 with this perl code?

这是我的perl代码位于/ perl-bin /目录中,但是由于某些原因,当我尝试从MySQL获取信息时,我不断收到错误500

这是代码

#! /usr/bin/perl

 use warnings;
 use strict;

 print "Content-type: text/html\n\n";
 print "<!DOCTYPE html>\n";
 print "<html>\n";
 print "<head>\n";

 print "<title>00000000000000000000</title>";
 print "<link rel='stylesheet' type='text/css' href='style.css' />";

 print "</head>\n";
 print "<body>\n";

 print "<div id='top'></div>";
 print "<div id='header'>";
 print "<div id='logo'></div>";

 print "</div>";

 use Mysql;

# MYSQL CONFIG VARIABLES
$host = "localhost";
$database = "000_ooo";
$tablename = "users";
$user = "000_root";
$pw = "l00V0r009;00XE_%0q;U00000000000000";

# PERL MYSQL CONNECT()
$connect = Mysql->connect($host, $database, $user, $pw);

# SELECT DB
$connect->selectdb($database);

# DEFINE A MySQL QUERY
$myquery = "SELECT * FROM $tablename";

# EXECUTE THE QUERY FUNCTION
$execute = $connect->query($myquery);

# HTML TABLE
print "<table border='1'><tr>
<th>id</th>
<th>product</th>
<th>quantity</th></tr>";

# FETCHROW ARRAY

while (@results = $execute->fetchrow()) {
    print "<tr><td>"
    .$results[0]."</td><td>"
    .$results[1]."</td><td>"
    .$results[2]."</td></tr>";
}

print "</table>";

 print "</body>\n";
 print "</html>\n";

您可以尝试使用CGI :: Carp在浏览器中获取错误消息:

use CGI::Carp qw(fatalsToBrowser);

(除非您希望用户看到可能显示机密信息的神秘错误消息,否则请不要在调试后保留此信息。)

您确定Mysql模块是访问数据库的正确方法吗? 该模块已过时; 如今,每个人都在使用DBI (可能在顶层使用了另一层)。 您可以尝试use Mysql;的Hello World类型脚本use Mysql; 但不会尝试实际连接到数据库,以查看其是否已安装。

简单的语法检查即可发现问题所在。

$ perl -c mysql
Global symbol "$host" requires explicit package name at mysql line 26.
Global symbol "$database" requires explicit package name at mysql line 27.
Global symbol "$tablename" requires explicit package name at mysql line 28.
Global symbol "$user" requires explicit package name at mysql line 29.
Global symbol "$pw" requires explicit package name at mysql line 30.
Global symbol "$connect" requires explicit package name at mysql line 33.
Global symbol "$host" requires explicit package name at mysql line 33.
Global symbol "$database" requires explicit package name at mysql line 33.
Global symbol "$user" requires explicit package name at mysql line 33.
Global symbol "$pw" requires explicit package name at mysql line 33.
Global symbol "$connect" requires explicit package name at mysql line 36.
Global symbol "$database" requires explicit package name at mysql line 36.
Global symbol "$myquery" requires explicit package name at mysql line 39.
Global symbol "$tablename" requires explicit package name at mysql line 39.
Global symbol "$execute" requires explicit package name at mysql line 42.
Global symbol "$connect" requires explicit package name at mysql line 42.
Global symbol "$myquery" requires explicit package name at mysql line 42.
Global symbol "@results" requires explicit package name at mysql line 52.
Global symbol "$execute" requires explicit package name at mysql line 52.
Global symbol "@results" requires explicit package name at mysql line 54.
Global symbol "@results" requires explicit package name at mysql line 55.
Global symbol "@results" requires explicit package name at mysql line 56.
mysql had compilation errors.

您的程序包括use strict (应如此)。 但是您尚未声明任何变量。

我同意@cjm。 您绝对应该至少使用DBI模块。 同样,为了美观,最好将所有“使用”语句保留在代码顶部,而不是任何其他代码之前。

我要确保的另一件事是您使用的用户名和密码确实有效。 尝试通过命令行登录mysql,如果这样做,请连接到db并确保该表存在。 也将这些变量从等式中删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM