簡體   English   中英

將PHP參數從數據庫傳遞給Perl Script,

[英]Passing PHP argument from database to Perl Script,

首先,我會說我是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:對不起語法不好,英語不是我的第一語言。

您需要從結果集中獲取一行(並添加錯誤處理,以防沒有...):

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

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

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

您的PHP代碼中沒有任何地方實際上對查詢結果做任何事情。 它不僅僅神奇地出現在$data ,你需要通過做類似的事情來實際獲取它

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM