現在の位置: ホーム> 最新記事一覧> $ errnoとmysqli_stmtを使用して、前処理ステートメントが失敗するかどうかを判断します

$ errnoとmysqli_stmtを使用して、前処理ステートメントが失敗するかどうかを判断します

M66 2025-06-05

前処理ステートメントは、データベース操作にPHPを使用する際にSQL注入攻撃を防ぐための安全な方法を提供します。 MySQLI拡張機能を使用して、 MySQLI_STMTオブジェクトを介して前処理ステートメントを実行できます。前処理ステートメントを実行する場合、ステートメントが正常に実行されるかどうかを判断する必要がある場合があります。 mysqli :: $ errnomysqli_stmtは、実行の障害を判断するための強力なツールです。

この記事では、これら2つを使用して、前処理ステートメントが失敗したかどうかを判断し、対応するコードの例を提供する方法を紹介します。

1. mysqli :: $ errnomysqli_stmtとは何ですか?

  • mysqli :: $ errno :これは、最後のmysql操作で発生したエラーコードを返すMysqliクラスのプロパティです。エラーが発生しない場合、値は0になります。

  • mysqli_stmt :これは、 mysqli拡張機能によって提供されるクラスであり、前処理ステートメントを表しています。このクラスを介してSQLクエリを実行してパラメーターを渡すことができます。

これら2つのツールを使用して、SQLクエリを実行した後にエラーが発生したかどうかを確認し、関連する例外を処理できます。

2。mysqli :: $ errnoを使用して、エラーがあるかどうかを判断します

まず、 MySqli :: $ errnoの使用方法を見て、データベース操作が失敗するかどうかを判断しましょう。

 <?php
// データベースに接続します
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');

// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// プリプロセシングステートメントを作成します
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");

// 前処理ステートメントが成功しているかどうかを確認してください
if ($stmt === false) {
    die("Prepare failed: " . $mysqli->errno . " - " . $mysqli->error);
}

// バインドパラメーター
$email = 'test@example.com';
$stmt->bind_param('s', $email);

// 実行ステートメント
$stmt->execute();

// 実行が成功したかどうかを確認してください
if ($stmt->errno) {
    echo "Error occurred: " . $stmt->errno . " - " . $stmt->error;
} else {
    echo "Query executed successfully!";
}

// 緊密なステートメントと接続
$stmt->close();
$mysqli->close();
?>

3.コードを説明します

  • 最初にMySQLデータベースに接続します。接続が失敗した場合は、 $ mysqli-> connect_errorでエラーを確認してください。

  • 次に、SQLクエリステートメントを準備し、 prepare()が成功するかどうかを確認します。失敗した場合、 $ mysqli-> errnoを使用してエラーコードを取得し、エラーメッセージを出力します。

  • パラメーターをバインドした後、ステートメントを実行し、 $ stmt-> errnoを使用して、実行プロセス中にエラーがあるかどうかを判断します。 Errnoの値が0より大きい場合、実行が失敗したことを意味します。 $ stmt->エラーを介してエラーの詳細を取得できます。

4。MySqli_Stmtを使用したエラー処理

$ mysqli :: $ errnoに加えて、 mysqli_stmtオブジェクト自体は、preprocessingステートメントの実行ステータスを判断するためのerrnoおよびエラー属性も提供します。 mysqli_stmt :: errnoを使用して、実行中にエラーコードをキャプチャできます。

 <?php
// 接続を作成します
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');

// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// 準備ステートメント
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");

// バインドパラメーター
$name = 'John Doe';
$email = 'john@example.com';
$stmt->bind_param('ss', $name, $email);

// 実行ステートメント
if (!$stmt->execute()) {
    echo "Execute failed: " . $stmt->errno . " - " . $stmt->error;
} else {
    echo "Insert successful!";
}

// リソースを閉じます
$stmt->close();
$mysqli->close();
?>

上記の例では、 $ stmt-> execute()はブール値を返します。実行が失敗した場合、エラーメッセージは$ stmt-> errnoおよび$ stmt->エラーを介して出力されます。

5。概要

  • mysqli :: $ errnoおよびmysqli_stmtを使用して、mysql実行中にエラーを効果的にキャプチャします。

  • mysqli_stmt :: errnoおよびmysqli_stmt ::エラーを介して、障害の原因を明確に取得し、対応する処理を実行できます。

  • これらのツールは、データベース操作のエラーをより適切にデバッグおよび処理し、コードの堅牢性とセキュリティを確保するのに役立ちます。

この記事が、データベース操作にMySQLI拡張機能を使用して役立つことを願っています!