Я пытаюсь создать таблицу в MySQL на основе ввода пользователем. В идеале сценарий Perl подключается к базе данных и создает таблицу с переменной, полученной от пользователя. Вот мой сценарий:Ошибка создания таблицы с переменной с использованием Perl в MySQL
print "Please enter a name for the table: ";
$tableName = <>;
chomp($tableName);
&createTable ($tableName);
sub createTable
{
use DBI;
my $platform = "mysql";
my $database = "example";
my $host = "localhost";
my $user = "user";
my $pw = "pw";
my $dsn = "dbi:$platform:$database:$host";
my $dbh = DBI->connect($dsn, $user, $pw) or die "Unable to connect: $DBI::errstr\n";
$dbh->do("DROP TABLE IF EXISTS $_");
$dbh->do("CREATE TABLE $table (column VARCHAR(17))");
$dbh->disconnect;
}
Но когда я выполнить сценарий, и введите значение (скажем, «тест»), он выпаливает это ко мне спиной:
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 at /path/to/scripts/dbTest.pl line 28, <> line 2.
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(column VARCHAR(17))' at line 1 at /path/to/scripts/dbTest.pl line 29, <> line 2.
Строка 28 является команда DROP , а строка 29 - команда CREATE. Я проверил свой синтаксис много раз, но я не понимаю, где находится ошибка. Я пропустил что-то настолько простое ...?
Ну, это определенно сделал трюк! Я думал, что где-то читал, что вы можете использовать @_, $ _ [0-inf] и $ _ взаимозаменяемо. Если я не пойму ОП на нем. [ЗДЕСЬ] (http://www.comp.leeds.ac.uk/Perl/subroutines.html) прямо в разделе «Параметры». Я вижу, теперь он имел в виду, что вы можете использовать его, но не как аргумент, переданный подпрограмме. Спасибо! – Arkevius
'$ _' - это переменная по умолчанию. '@ _' - это массив по умолчанию. '$ _ [1]' является вторым элементом массива '@ _'. –