PHPでのデータベース操作にMySQLIを使用する場合、エラーメッセージを印刷する必要がある状況に遭遇することがよくあります。通常、 MySQLI拡張機能は、エラーコード( MySQLI :: $ ERRNO )とエラー情報( mysqli :: $ error )を提供して、エラーが発生したときに迅速にフィードバックされた問題を支援します。しかし、これらのエラーメッセージを優雅に印刷して、エラーログをより明確かつ簡単にデバッグできるようにするにはどうすればよいですか?この記事では、mysqli :: $ errnoを優雅に使用して、PHPでエラーコードとエラーメッセージを印刷する方法を示します。
まず、PHPでのデータベース接続と基本的なエラー処理にMySQLIを使用する方法を見てみましょう。 MySQLI Connectionオブジェクトでは、 MySQLI :: $ ERRORおよびMYSQLI :: $ ERRNOプロパティを介してエラーメッセージとエラーコードを取得できます。
<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$database = 'test_db';
// 作成する MySQLi 接続する
$conn = new mysqli($host, $username, $password, $database);
// 检查接続する是否成功
if ($conn->connect_error) {
echo "接続する失败: " . $conn->connect_error;
exit();
}
// クエリを実行します
$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);
// クエリが成功したかどうかを確認してください
if (!$result) {
// エラーコードとエラーメッセージを印刷します
echo "エラーコード: " . $conn->errno . "<br>";
echo "エラーメッセージ: " . $conn->error;
}
// 关闭接続する
$conn->close();
?>
Connect_Errorを使用して、データベース接続が成功しているかどうかを確認します。
ERRNOとエラーを使用して、エラーコードとエラー情報を取得します。
クエリを実行すると、エラーが発生した場合、詳細はerrnoおよびエラーを介して出力されます。
エラーメッセージを直接出力するのは効果的ですが、生産環境では、通常、エラーログを記録し、機密情報がエンドユーザーに公開されないようにします。実際の開発では、エレガントなエラー処理は、開発者が問題を迅速に見つけるのに役立つだけでなく、システムのセキュリティとユーザーエクスペリエンスを向上させることもできます。
error_log()関数を使用して、エラー情報をログファイルに書き込むことができます。これが改善されたコードです:
<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$database = 'test_db';
$conn = new mysqli($host, $username, $password, $database);
if ($conn->connect_error) {
// 使用 error_log 记录接続する错误
error_log("接続する失败: " . $conn->connect_error, 3, "/var/log/php_errors.log");
exit();
}
$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);
if (!$result) {
// ログエラーログ
error_log("エラーコード: " . $conn->errno . " エラーメッセージ: " . $conn->error, 3, "/var/log/php_errors.log");
// 输出友好的エラーメッセージ
echo "操作に失敗しました,後でもう一度やり直してください。";
}
$conn->close();
?>
error_log()を使用して、指定されたログファイル( /var/log/php_errors.logなど)にエラー情報を書き込みます。
フロントエンドにユーザーフレンドリーなエラーメッセージを表示して、技術的な詳細を公開しないようにします。
3-パラメーター設定を介してファイルにエラーを書き込みます。
実稼働環境では、通常、PHPエラーディスプレイを無効にしてログに記録します。機密エラー情報がエンドユーザーに公開されるのを防ぐために、 PHP.iniを変更するか、次のコードを使用してエラー出力を無効にすることができます。
<?php
// エラー表示を無効にします
ini_set('display_errors', '0');
// エラーログを有効にします
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');
// 接続する数据库并クエリを実行します
$conn = new mysqli($host, $username, $password, $database);
if ($conn->connect_error) {
// 记录接続する错误
error_log("接続する失败: " . $conn->connect_error, 3, "/var/log/php_errors.log");
exit();
}
$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);
if (!$result) {
// 记录エラーメッセージ
error_log("エラーコード: " . $conn->errno . " エラーメッセージ: " . $conn->error, 3, "/var/log/php_errors.log");
echo "操作に失敗しました,後でもう一度やり直してください。";
}
$conn->close();
?>
ini_set( 'display_errors'、 '0') :エラー表示を無効にします。
ini_set( 'log_errors'、 '1') :エラーロギングを有効にします。
エラーメッセージは、error_log()関数を介して指定されたファイルに記録されます。
エラー処理をより柔軟にするために、 mysqli :: $ errnoおよびmysqli :: $エラーが均一に処理されるカスタムエラー処理機能を定義できます。これにより、複製コードが削減され、コードの保守性が向上します。
<?php
// カスタムエラー処理機能
function handleMysqliError($conn) {
// ログにログログエラー
error_log("エラーコード: " . $conn->errno . " エラーメッセージ: " . $conn->error, 3, "/var/log/php_errors.log");
// 显示友好的エラーメッセージ
echo "操作に失敗しました,後でもう一度やり直してください。";
}
// 作成する数据库接続する
$conn = new mysqli($host, $username, $password, $database);
if ($conn->connect_error) {
handleMysqliError($conn);
exit();
}
$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);
if (!$result) {
handleMysqliError($conn);
}
$conn->close();
?>
HandlemysqlierRor関数は、エラー処理のロジックをカプセル化します。
エラーが発生した場合、関数を直接呼び出すと、コードを簡素化するだけでなく、統一されたエラー処理方法も保証されます。
PHPでは、 mysqli :: $ errnoおよびmysqli :: $ errorを使用してエラーメッセージを印刷することが非常に一般的です。エラー処理をよりエレガントで安全にするために、ロギング、カスタムエラー処理機能などを使用して、ログ、エラーの出力を無効にすることにより、システムの堅牢性とユーザーエクスペリエンスを向上させることができます。
この記事が、データベース操作のエラーをPHPで優雅に処理する方法をよりよく理解するのに役立つことを願っています。ご質問がある場合は、メッセージを残して議論してください!