MySQL здесь - красная сельдь.Вы используете DBI правильно, но после извлечения данных из базы данных он работает неправильно.
Ваша проблема с этой строкой:
$results = $row[0],$row[1],$row[3];
Это очень похоже на выполнениеэтот код:
$x = 100, 200, 300;
Если вы напечатаете $x
, вы увидите, что он содержит "100".У вас есть три элемента в правой части вашего оператора присваивания и только одна переменная в левой части, поэтому только одно из значений (первое) в конечном итоге присваивается переменной.
IЗдесь добавим, что если бы в вашем коде был включен use warnings
(а у всех хороших программистов на Perl всегда включены use strict
и use warnings
), то вы бы получили предупреждение о «бесполезном использовании константы в void».context ", который бы указывал на то, что что-то не так.
Есть несколько подходов, которые можно использовать, чтобы исправить это.И какой из них вы выберете, зависит от того, что вы пытаетесь сделать.Очевидное решение состоит в том, чтобы преобразовать $results
в массив:
@results = ($row[0], $row[1], $row[2]);
Обратите внимание, я также поставил круглые скобки вокруг вашего списка значений.Это необходимо для того, чтобы сообщить Perl, что это назначение списка.Конечно, это просто сложный способ записи:
@results = @row;
Другой вариант - взять три значения и превратить их в одну строку.Это не очень хороший выбор, если вы собираетесь использовать эти значения отдельно в другом месте вашего кода, но если вы просто хотите что-то распечатать, вы можете написать что-то вроде:
$results = "$row[0],$row[1],$row[2]";
Опять же, естьболее простой способ написать это:
$results = join ',', @row;