2012-02-17 2 views
2

Я получаю доступ к базе данных из моего скрипта perl и пытаюсь включить оператор if, чтобы иметь возможность запрашивать разные вещи в зависимости от того, что пользователь выбирает.500 ошибка внутреннего сервера perl/База данных

Он отлично работает без оператора if, но когда я добавляю оператор if, он дает мне ошибку 500.

Так это работает:

my $query = "SELECT * FROM cars"; 

И это один не делает:

if($model eq "All" ){ 

    my $query = "SELECT * FROM cars"; 

} 
+0

эхо значение $ model перед оператором if. – alfasin

+0

Эхо ничего не показывало, сломалось до того, как оно дошло до этой линии. Я уверен, что это все, потому что, если я использую хром и проверяю элемент и смотрю на заголовки, «Все» отправляется для модели. Также найдена эта ошибка: Глобальный символ «$ query» требует явного имени пакета в – searayman

+0

ОК, поэтому я ответил на свой вопрос методом проб и ошибок. Я переместил другое заявление, которое появилось после if. и убрал другого. Таким образом, запрос будет настроен на что-то независимо от того, что мне нужно, и мне пришлось оттащить меня от infornt запроса $ в выражении if. Теперь все хорошо! По-видимому, я не осведомлен, чтобы ответить на мой собственный вопрос на этом сайте ... это не позволит мне lol – searayman

ответ

4

Переменные, объявленные с моей имеют объем ближайшего объемлющего блока. Что в вашем случае означает, что $query не объявлен вне вашего оператора if.

Решение заключается в размещении декларации в правом объеме, например. перед if-statement.

Фактически, как показано в сообщении о вашей ошибке Global symbol "$query" requires explicit package name, это приведет к ошибке 500.

+0

Это приведет к тому, что переменная не будет определена после блока, но приведет ли это к ошибке сервера 500? – Konerak

+0

@Konerak С 'use strict' - это подразумевается ошибкой, о которой сообщает OP, - да. Поскольку сценарий не будет компилироваться, только сообщать об ошибках. – TLP

Смежные вопросы