После запроса к БД я больше не могу печатать данные и текст в браузере - PullRequest
2 голосов
/ 16 февраля 2010

Я учусь на уроках веб-сценариев, и, честно говоря, к сожалению, она заняла второе место среди моих классов по сетям, дизайну и анализу. Из-за этого я нахожу, что сталкиваюсь с проблемами, которые могут быть обыденными, но не могу легко найти решение.

Я пишу CGI-форму, которая должна работать с БД MySQL. Я могу вставлять и удалять в БД просто отлично. Моя проблема возникает при запросе БД.

Мой код компилируется нормально, и я не получаю ошибок при попытке «отобразить» информацию в БД через браузер, но данные и текст на самом деле не отображаются. Данный код здесь:

print br, 'test';

my $dbh = DBI->connect("DBI:mysql:austinc4", "*******", "*******", {RaiseError => 1} );
my $usersstatement = "select * from users";
my $projstatment = "select * from projects";

# Get the handle
my $userinfo = $dbh->query($usersstatement);
my $projinfo = $dbh->query($projstatement);

# Fetch rows
while (@userrow = $userinfo->fetchrow()) {
    print $userrow[0], br;
}

print 'end';

Этот код находится в операторе if, который окружен заголовком print, start_html, form, / form, end_html. Я просто пытался отладить и выяснить, что происходит, и распечатать операторы test and end. Он распечатывает тест, но не распечатывает конец. Он также не распечатывает данные в моей БД, которые приходят до того, как я распечатаю конец.

Я верю, что я делаю:

  • Подключение к моей БД
  • Формирование строки, содержащей команду / запрос к БД
  • Получение дескриптора для моего запроса, который я выполняю в БД
  • Получение строки из моей ручки
  • Печать первого поля в строке, которую я извлек из таблицы

Но я не понимаю, почему мои данные не будут распечатываться так же, как и текст в конце. Я посмотрел в БД, и на самом деле он содержит данные в БД и таблицу, из которой я пытаюсь получить данные.

Это меня озадачило, поэтому я ценю любую помощь. Еще раз спасибо. =) * * Один тысяча двадцать-шесть

Решение:

Я использовал тот, который не поддерживал модули, которые я включал. Это приводит меня к другому вопросу. Как я могу обнаружить такие ошибки? Моя программа действительно компилируется правильно, и веб-страница не "ломается". Помимо двойной проверки того, что все методы, которые я использую, являются действительными, могу ли я увидеть что-то вроде текста, не отображаемого, и предположить, что произошла ошибка, подобная этой?

1 Ответ

1 голос
/ 16 февраля 2010

После прочтения комментариев ваша программа не работает, потому что query () не выполняет SQL-запрос. Поэтому вы, вероятно, вызываете неопределенную подпрограмму, если это не оболочка, которую вы определили в другом месте.

Вот мой оригинальный пост полезных советов, которые все еще применяются:

  1. Я надеюсь, что вы использовали CGI, DBI и т. Д. ... и использовали CGI :: Carp и использовали строгий;
  2. Поиск ошибок в /var/log/apache2/access.log или error.log
  3. Поймите, что первое, что печатает CGI-скрипт, ДОЛЖЕН быть действительный заголовок, иначе веб-сервер и браузер станут недовольными, и часто ничего не отображается.
  4. Из-за # 3 сначала печатайте заголовок ПЕРЕД тем, как вы что-либо делаете, особенно перед тем, как подключиться к базе данных, где сценарий может умереть, или напечатаете что-то еще, потому что в противном случае ошибки или другие сообщения будут отправлены перед заголовком.
  5. Если вы все еще не видите ошибку, вернитесь к # 2.
  6. CGI, которые используют CGI.pm, могут запускаться из командной строки в терминальной сессии без прохождения через веб-сервер. Это также хороший способ отладки.
...