Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DBD::mysql::st执行失败:查询为空_Mysql_Perl_Dbi - Fatal编程技术网

DBD::mysql::st执行失败:查询为空

DBD::mysql::st执行失败:查询为空,mysql,perl,dbi,Mysql,Perl,Dbi,第一个帖子。如果格式化不是百分之百的,请容忍我。谢谢 我正在从一个旧的centos服务器迁移到一个使用更先进的Debian 9操作系统的服务器,我遇到了几个程序不兼容的问题。。。但这并不全是坏事。我有一个完整的LAMP堆栈工作,几个数据库和它们的页面正常运行。不幸的是,我遇到了麻烦。我会走过去 在我的www可访问的perl脚本中,我没有在公共可访问的位置包含登录详细信息。我喜欢这样 使用DBI; 需要connect.cgi; &我的"连接",; 在连接文件中,我有这样的 sub my_conne

第一个帖子。如果格式化不是百分之百的,请容忍我。谢谢

我正在从一个旧的centos服务器迁移到一个使用更先进的Debian 9操作系统的服务器,我遇到了几个程序不兼容的问题。。。但这并不全是坏事。我有一个完整的LAMP堆栈工作,几个数据库和它们的页面正常运行。不幸的是,我遇到了麻烦。我会走过去

在我的www可访问的perl脚本中,我没有在公共可访问的位置包含登录详细信息。我喜欢这样

使用DBI; 需要connect.cgi; &我的"连接",; 在连接文件中,我有这样的

sub my_connect{ $dsn=DBI:mysql:dbmydatabase:localhost; $user_name='uMyUser'; $user_pass='pMyPassword'; $dbh=DBI->connect$dsn、$user\u name、$user\u pass、{RaiseError=>1}; 返回$dbh; } 到目前为止,一切顺利。我已经像这样检查了连接

如果$胸径{ die无法连接MySQL数据库DBI->errstr; }否则{ 已成功连接到MySQL服务器。\n; } 。。。一切看起来都很美好

我还从连接文件中调用执行,如下所示

sub Do_SQL{ $sth=$dbh->prepare$SQL; $rv=$sth->执行; 归还某物; } 对于这个任务,我想检查数据库中是否存在记录。所以我设置并运行它

$SQL=qq/选择存在从`table1`中选择1,其中`col1`='$col1'/; &不要使用SQL; 问题是,我收到一条空的查询消息

DBD::mysql::st execute失败:connect.cgi第54行的查询为空。 我尝试了一些不同的查询。例如

$SQL=qq/从`table1`中选择count*,其中`col1`='$col1'/; $SQL=qq/从`table1`中选择`id`,其中`col1`='$col1'/; $SQL=qq/从“表1”中选择*; 。。。但结果是一样的

我可能会倾向于建议在新旧设置之间存在某种版本不兼容,但我还有其他几个具有类似配置的页面可以正常工作。不同的是,我工作的东西是从以前的数据库备份和恢复的。而当前的问题是我在新服务器上从头创建的第一个新数据库

有趣的是,我在上面提到的查询是在命令行上工作的。它们在perl脚本中不起作用。我已经做了几次搜索,但找不到任何解决方案。因此,我在这里寻求更多经验的益处和智慧


感谢您的见解。

将参数传递给函数并使用返回值将比依赖全局变量更可靠,更不容易出错。。。当然,如果你还没有这样做,一定要严格使用;使用警告;帮助尽早发现潜在问题。您还应该将值绑定到查询中的参数,而不是直接在查询字符串中包含$col1之类的变量,以帮助解决sql注入问题。从您发布的代码来看,sub Do_sql很可能位于与您设置的$sql变量不同的$sql变量范围内。你应该把它传递给sub。这就是你要做的,你需要向我们展示代码。不要调用子例程&name_of_sub这会把@_的现有内容传递给子例程。调用子例程时最好不要使用&完全不要。@Bobby:对不起,是的,它并不总是复制旧代码。有时,这是由于从旧网站或书籍中学习造成的。事实上,我认为在学习Perl的过程中仍然令人失望。你可能会觉得有趣。