第一篇文章。如果格式化不是百分之一百,请忍受。谢谢。
我正在从较旧的centos服务器迁移到具有最新Debian 9操作系统的服务器,但是我遇到了一些程序不兼容的问题……但这还不是很糟糕。我具有完整的LAMP堆栈,并且可以正常运行“几个数据库及其页面”。不幸的是,我遇到了一个障碍。我会逐步解决的...
在我的www可访问的perl脚本中,我没有在公共可访问位置中包含登录详细信息。我像这样启动MySQL ...
use DBI ;
require "connect.cgi" ;
&my_connect();
在连接文件中,我是这样的...
sub my_connect {
$dsn = "DBI:mysql:dbmydatabase:localhost" ;
$user_name = 'uMyUser';
$user_pass = 'pMyPassword';
$dbh = DBI->connect($dsn, $user_name, $user_pass, { RaiseError => 1} ) ;
return $dbh;
}
到目前为止,太好了。我已经像这样检查了连接...
if(!$dbh){
die "failed to connect to MySQL database DBI->errstr()";
}else{
print("Connected to MySQL server successfully.\n");
}
...所有东西看起来都很好,很漂亮。
我也要求从连接文件中执行,就像这样...
sub Do_SQL {
$sth = $dbh->prepare($SQL);
$rv = $sth->execute;
return $sth;
}
对于该任务-我想检查数据库中是否存在记录。所以我将其设置并运行...
$SQL = qq/ SELECT EXISTS(SELECT 1 FROM `table1` WHERE `col1` = '$col1') /;
&Do_SQL;
问题是,我收到的查询消息为空。
DBD::mysql::st execute failed: Query was empty at connect.cgi line 54.
我在查询中尝试了一些变体。例如...
$SQL = qq/ SELECT count(*) FROM `table1` WHERE `col1` = '$col1') /;
$SQL = qq/ SELECT `id` FROM `table1` WHERE `col1` = '$col1') /;
$SQL = qq/ SELECT * FROM `table1` /;
...但是结果是相同的。
我可能会建议新旧设置之间存在某种版本的不兼容性,但是我还有其他几页配置类似的页面也可以正常工作。不同之处可能是我正在工作的东西是从以前的数据库中备份和还原的。而当前的问题是我在新服务器上从头开始创建的第一个新数据库。
有趣的是,我上面提到的查询在命令行上工作。它们在perl脚本中不起作用。我已经进行了几次搜索,但找不到任何指向解决方案的信息。因此,我在这里寻求比自己更多的经验带来的好处和智慧。
感谢您的见解。