почему я получаю ошибку 500 с этим кодом Perl? - PullRequest
1 голос
/ 26 октября 2011

Вот мой 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";

Ответы [ 3 ]

8 голосов
/ 26 октября 2011

Вы можете попробовать использовать CGI :: Carp , чтобы получить сообщение об ошибке в вашем браузере:

use CGI::Carp qw(fatalsToBrowser);

(Не оставляйте это после отладки, если вы не хотите, чтобы ваши пользователи видели загадочные сообщения об ошибках, которые могут раскрыть конфиденциальную информацию.)

Вы уверены, что модуль Mysql является правильным способом доступа к базе данных? Этот модуль устарел; все используют DBI в эти дни (возможно, с другим слоем сверху). Вы можете попробовать скрипт типа Hello World, который просто выполняет use Mysql;, но на самом деле не пытается подключиться к базе данных, чтобы проверить, установлена ​​ли она вообще.

5 голосов
/ 26 октября 2011

Простая проверка синтаксиса выявляет проблему.

$ 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 (как и должно быть).Но вы не объявили ни одной из ваших переменных.

1 голос
/ 26 октября 2011

Я согласен, согласен с @cjm. Вы должны определенно использовать модуль DBI как минимум. Кроме того, для эстетики лучше всего хранить все ваши операторы использования в верхней части кода перед любым другим кодом.

Еще одна вещь, в которой я хотел бы убедиться, это то, что имя пользователя и пароль, которые вы используете, действительно работают. Попробуйте войти в mysql через командную строку, если они это сделают, подключитесь к БД и также убедитесь, что таблица существует. Вычтите эти переменные из уравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...