Perl - 帮助排除使用双引号和单引号的dbi语句
我想弄清楚为什么我无法让我的变量正常使用Getopt::Std
。Perl - 帮助排除使用双引号和单引号的dbi语句
例如在用户和密码在单引号这个perl的DBI声明,一切工作正常:
my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node",'foo-bar','mypw');
但我想改变这种说法,这样我可以在$一个变量传递用户,$ pw。 我使用Getopt::Std;
这些值来传递:
my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node", '$user','$pw');
这个工程现在:
my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node", $user,$pw);
我收到以下错误MESG:
DBI connect('database=;host=hostname','',...) failed:
更新: 从大家输入后,对我来说排除这个问题的最好方法是看看我的变数是否被跟踪。我基本上是传递了错误的价值观。所以,我简单地用这些2值的getopts测试了dbi片断,并且没有其他任何东西,并且能够使其工作。
您没有显示所有错误消息,但是您显示的部分似乎对用户名有空值。你确定你的$user
和$pw
实际上是在你的程序中正确设置的吗?
不同之处在于,当您使用双引号时,变量会在字符串中进行插值,因此最终字符串将是您在变量中的值。 使用单引号时,最终的字符串不会被变量值插值,所以无论$ user变量的值如何,它都是'$ user'。
谢谢。看看我的编辑。我尝试了一些东西,如'$ user'或$ user,但是dbi仍然失败。 – jdamae 2011-05-10 06:01:33
my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node;mysql_compression=1;port=3306", $user,$pw);
应该工作,前提是$dbsrc
,$node
,$user
和$pw
设置是否正确。你的错误信息的其余部分是什么?
my $dbh = DBI->connect("DBI:mysql:database=$dbsrc;host=$node;mysql_compression=1;port=3306", '$user','$pw');
不起作用,因为单引号引起的文本字符串“$ user”和“$私服”被作为登录凭据,而不是变量$user
和$pw
的值发送。
显示你如何设置$ user和$ pw;双引号版本应该工作(应该只是通过'... = 3306“,$ user,$ pw)' – ysth 2011-05-10 05:59:43