为什么2> $ NULL不将错误重新路由为NULL?

时间:2019-06-27 23:04:40

标签: powershell

我有以下声明。

print_r("Execution Success ")

class Db{ private static $_instance = null; private $_conn, $_qry, $_error = false; private function __construct(){ try{ $this->_conn = new PDO("mysql:host=127.0.0.1;dbName=online_shop", "root", ""); //echo "Conected to Db <br/>"; }catch(PDOException $e){ die($e->getMessage()); } } public static function getInstance(){ if(!isset(self::$_instance)){ return self::$_instance = new Db(); } return self::$_instance; } public function query($sql, $params = array()){ $this->_error = false; if($this->_qry = $this->_conn->prepare($sql)){ $x = 1; if(count($params)){ foreach($params as $param){ $this->_qry->bindValue($x, $param); $x++; } } if($this->_qry->execute(){ foreach($this->_qry->fetchAll() as $row){ print_r("Execution Success "); }} } } } echo Db::getInstance()->query("SELECT name FROM products WHERE id = ?", array(1)); 似乎根本没有将错误重新路由为NULL,因为我仍在接收异常。

  

该变量无效,因为该值无效   CINPUT变量的值。

我想忽略异常,在这种情况下我不知道如何使用$CINPUT = $CINPUT.ToUpper() -replace '(^\s+|\s+$)','' -replace '\s+',' ' 2> $NULL

注意:我知道它并且可以使用,但是我不想将2> $NULL用作脚本的全局设置。

1 个答案:

答案 0 :(得分:1)

2> $NULL只能抑制写入到 PowerShell错误流的错误。

相比之下,您的语句会导致 .NET异常,该异常表现为PowerShell中的语句终止错误,您可以使用try / catch

try {
  $CINPUT = $CINPUT.ToUpper() -replace '(^\s+|\s+$)','' -replace '\s+',' '
} catch {} # ignore the statement-terminating error

通常,仅当命令仅产生非终止错误时,错误流2>的重定向才会成功。