現在の位置: ホーム> 最新記事一覧> 関数はどういう意味ですか?あなたが知っておくべきいくつかの状況

関数はどういう意味ですか?あなたが知っておくべきいくつかの状況

gitbox 2025-06-09

PHPでは、 MySqli拡張機能を使用してデータベースを操作する場合、 $ mysqli-> rifected_rowsは、最近実行されたSQLステートメントがどの行に影響したかを示すことができる非常に一般的なプロパティです。ただし、 $ mysqli-> thefected_rowsが-1を返す状況に遭遇する場合があります。これはどういう意味ですか?この記事では、リターン-1を詳細に引き起こすいくつかの一般的な状況を分析し、コードの問題をよりよく理解してトラブルシューティングするのに役立ちます。


mysqliとは何ですか:: $ hiblected_rows

mysqli :: $ hiblected_rowsは、挿入、更新、および削除されたステートメントの影響を受けた行の数を前回返します。例えば:

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->query("UPDATE users SET active = 1 WHERE id = 10");
echo $mysqli->affected_rows; // 影響を受ける行の数を出力します
?>

この更新ステートメントが正常に実行された場合、 $ rifected_rowsは、変更された実際の行数を示す非陰性整数を返します。ただし、エラーが発生した場合、または特別な状況が発生した場合、返品値は-1になる場合があります。


mysqli :: $ hiblected_rowsが-1を返すいくつかの状況

1。SQLステートメントの実行に失敗しました

構文エラーなど、SQLステートメントが実行に失敗した場合、テーブルは存在しませ。現時点では、エラーメッセージを確認して、次のことを確認する必要があります。

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$result = $mysqli->query("UPDATE non_existing_table SET active=1");

if ($result === false) {
    echo "クエリに失敗しました,エラーメッセージ:" . $mysqli->error;
    echo "影響を受ける行の数:" . $mysqli->affected_rows; // ここに出力があります -1
}
?>

2。行数に影響しないクエリを実行します

$ rifected_rowsはクラス操作を変更することにのみ意味があります(挿入、更新、削除)。データを変更しない選択、表示、またはその他のクエリを実行している場合、 $ rifected_rows-1を返します。

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->query("SELECT * FROM users");
echo $mysqli->affected_rows; // 出力 -1,なぜならSELECT行数には影響しません
?>

3。トランザクションがコミットされていないか、自動コミットが閉じられていません

トランザクションを使用する場合は、変更を実行しますが、コミットしない場合、 $ rifected_rowsは外れ値を返す場合があります。トランザクションが正しく提出されていることを確認してください。

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->autocommit(false);
$mysqli->query("UPDATE users SET active=1 WHERE id=5");

echo $mysqli->affected_rows; // それはまだ正しいことを示すかもしれません
$mysqli->commit();
?>

コミットされていないトランザクションは、実際の障害が有効になる可能性があり、影響を受けた_rowsは通常正しく戻りますが、特別な場合は誤解を招く可能性があります。

4.前処理ステートメントの不適切な使用

前処理ステートメントで実行されると、場合によっては$ stmt-> fected_rowsが-1である場合があります。たとえば、行数の返却をサポートしないステートメントが実行されるか、クエリが失敗します。

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$stmt = $mysqli->prepare("UPDATE users SET active=1 WHERE id=?");
$id = 10;
$stmt->bind_param("i", $id);
$stmt->execute();

echo $stmt->affected_rows; // おそらく-1,実行の例外を示します
?>

$ stmt->エラーを確認して、エラーがあるかどうかを確認してください。


-1が返される状況を正しく処理する方法は?

  1. SQLの実行が成功したかどうかを確認してください<br> 返品値がfalseかどうかを判断し、 $ mysqli->エラーを呼び出して詳細なエラー情報を取得します。

  2. SQLステートメントタイプを確認します
    影響を受けた_rowsは変更操作にのみ有効であり、クエリステートメントは常に-1を返します。

  3. トランザクションステータスを確認<BR> 操作を変更するトランザクションが提出されていることを確認してください。

  4. 前処理ステートメントで誤った判断を下す<br> $ stmt-> execute()が成功しているかどうかを確認し、時間内にエラーを処理します。


まとめ

  • mysqli :: $ rifected_rowsは-1を返します。これは通常、最新のSQL実行が失敗したこと、または行数に影響しないステートメントの実行が失敗したことを意味します。

  • それを使用する場合、エラー情報とSQLステートメントタイプを組み合わせて判断を下す必要があります。

  • コードを作成するとき、 $ mysqli->エラーまたは$ stmt->エラーをチェックする習慣を開発すると、問題がすぐに見つかります。

上記の方法により、 mysqli :: $ hiffected_rowsが-1を返し、コードの堅牢性を向上させ、効率をデバッグする状況をより正確に理解および処理できます。