#mysql #perl
#mysql #perl
Вопрос:
Вот мой код perl, расположенный в каталоге / perl-bin/, но по какой-то причине, когда я пытаюсь получить что-то из MySQL, я продолжаю получать ошибку 500
вот код
#! /usr/bin/perl
use warnings;
use strict;
print "Content-type: text/htmlnn";
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";
Комментарии:
1. Вы пробовали просматривать журнал ошибок вашего веб-сервера? Вы пробовали запускать его из командной строки?
2. у меня нет доступа к командной строке, и я не вижу никаких журналов
3. Затем откажитесь от дальнейшей работы, пока ваш клиент или менеджер не предоставят вам разумную рабочую среду 🙂
4. @PT Desu, если у вас нет доступа к вашим журналам, у нас его определенно нет.
Ответ №1:
Вы можете попробовать использовать CGI::Carp, чтобы получить сообщение об ошибке в вашем браузере:
use CGI::Carp qw(fatalsToBrowser);
(Не оставляйте это после отладки, если вы не хотите, чтобы ваши пользователи видели загадочные сообщения об ошибках, которые могут раскрыть конфиденциальную информацию.)
Вы уверены, что модуль Mysql является правильным способом доступа к базе данных? Этот модуль устарел; в наши дни все используют DBI (возможно, с другим слоем сверху). Вы можете попробовать скрипт типа Hello World, который просто выполняет use Mysql;
, но не пытается подключиться к базе данных, чтобы проверить, установлена ли она вообще.
Ответ №2:
Простая проверка синтаксиса выявляет проблему.
$ 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. это не сработает, даже если я удалю use strict, хотя у меня, кажется, есть все необходимые модули, DBD ::Pg (2.18.1), DBD ::SQLite (1.31), DBD :: SQLite2 (0.33), DBD :: mysql (4.019), DBI (1.616)
2. Не удаляйте
strict
. Устраните проблему, объявив переменные. Что это за список необходимых модулей? Вы не используете ни один из этих модулей. Вы используете Mysql.pm . Это выглядит так Mysql.pm раньше был частью дистрибутива DBD :: mysql, но он был удален около пяти лет назад. Эта программа не будет работать, пока вы не измените ее для работы с DBI и DBD :: mysql.
Ответ №3:
Я согласен согласен с @cjm. Вы обязательно должны использовать модуль DBI как минимум. Кроме того, для эстетики лучше всего хранить все ваши инструкции «use» в верхней части вашего кода, перед любым другим кодом.
Еще одна вещь, в которой я хотел бы убедиться, это то, что имя пользователя и пароль, которые вы используете, действительно работают. Попробуйте войти в mysql через командную строку, если они это сделают, подключитесь к БД, а также убедитесь, что таблица существует. Также исключите эти переменные из уравнения.
Комментарии:
1. вся информация, связанная с mysql, верна, она была протестирована с помощью PHP