2013-01-08 111 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;