2020年3月1日 星期日

PHP 開啟 MySQL 的錯誤報告

為了避免敏感的資料庫資訊因為程式碼的錯誤而曝露,PHP 預設不會報告在使用 mysqli 或是 PDO 操作 MySQL 時的錯誤。程式設計人員需要決定是否啟用相關的錯誤報告。 要特別注意的是,當開啟錯誤報告後,不要讓報告內容呈現在一般的使用者前。

MySQLi


mysqli 使用的是mysqli_driver::$report_mode (或是mysqli_report)。例如,如果要在發生查詢錯誤時丟出例外 (但是忽略警告),可以進行下列的設定:
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;


或是簡單的使用
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

其中,MYSQLI_REPORT_ERROR 代表開啟錯誤報告,MYSQLI_REPORT_STRICT 代表在錯誤時丟出例外 (throw Exceptions for errors);管道符號 | 是位元運算子中的 "或",可以用來設定多個旗標 (bitwise disjunction of flags)。

PDO


PDO 使用的是 PDO::setAttribute。例如,如果要在發生查詢錯誤時丟出例 (但是忽略警告),可以進行下列的設定:
$connection = new pdo("mysql:localhost;dbname=db_name", "user_name", "user_password");
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

其中,PDO::ATTR_ERRMODE 代表開啟錯誤報告,PDO::ERRMODE_EXCEPTION 代表在錯誤時丟出例外。

沒有留言: