2013-01-08 74 views
0

首先,我会说我是Perl新手。将PHP参数从数据库传递给Perl脚本,

我有一个问题,传递一个PHP参数到我的Perl脚本。参数来自SQL查询。这里是代码的一个例子和解释。

此代码用于发送ID并从数据库中检索用户的全名,然后将其发送到perl脚本,以便用户从Fortinet无线设备中删除。

PHP代码

function deleteUser($db){ 
    $id = $POST['param']; 
    $SQLq = 'delete from users where id = ?'; 

    $q = $db->prepare($SQLq); 
    $q->execute(array($id)); 

    $data = $q->fetch(); 

    $username = $data['user_name']; #data-type in phpmyadming : varchar 
    exec('perl /var/www/xxx/deleteUserWifi.pl'.' '.escapeshellarg($id).' '.escapeshellarg($username),$output); 
} 

下面是从我的Perl脚本

#!/usr/bin/perl -w 
    use strict; 
    use Net::SSH::Perl; 

    #login info to log on the fortinet device 
    my $hostname = "192.168.0.2"; 
    my $username = "aaaa"; 
    my $password = "xxxx"; 

    my $userID= $ARGV[0]; 
    my $userName = $ARGV[1]; 

    #connection to the FORTINET device 
    my $ssh = Net::SSH::Perl->new($hostname); 
    $ssh->login($username, $password); 

    #string to execute 
    my $cmd = "config vdom \n 
    edit root \n 
    config system dhcp server \n 
    edit 2 \n 
    config reserved-address \n 
    delete ". $userID ." \n 
    end \n 
    end \n 
    config firewall address \n 
    delete \"" .$userName "\" \n 
    end \n 
    end \n 
    exit" 
    my($stdout,$stderr,$exit) = $ssh->cmd($cmd); 

代码我没有问题,我发送ID和删除发送的ID的用户的IP预约。出于某种原因,我无法从设备中删除的用户名进入,但如果我在PHP代码和硬编码去的用户名喜欢这个工作完全正常:

PHP代码

 $username = "test test"; 

我曾尝试发送它之前,一个演员(字符串),但似乎没有任何作品。那么有关如何调试这个任何想法?

非常感谢您提前。

PoPlante

PS:很抱歉的穷人语法,英语不是我的第一语言。

+2

拿去哪里'$ data'从何而来?你从'$ data ['user_name']'得到'$ username',但是你不把查询结果赋给'$ data'。 – vanneto

+1

用PHP使用SSH2模块重新编写Perl脚本中的几行代码会更有意义吗? http://php.net/manual/en/book.ssh2.php –

回答

2

您需要fetch从结果集中行(并添加错误处理的情况下,有没有...):

$q = $db->prepare($SQLq); 
    $q->execute(array($id)); 

    $data = $q->fetch(PDO::FETCH_ASSOC); 

    $username = $data['user_name']; #data-type in phpmyadming : varchar 
+0

谢谢你提及我忘记了抓取,它实际上在代码中只是在复制代码时忘记了它:S – user1882743

0
在PHP代码

无处是你真正做什么用的查询结果。它不只是奇迹般地出现在$data,实际上你需要做类似

$data = $q->fetchObject(); 
$id = $data->user_name;