データベース操作にPHPのMySQLI拡張機能を使用する場合、 MySQLI :: STMT_INIT()は重要な方法であり、ステートメントオブジェクト( MySQLI_STMT )の初期化に使用され、SQLステートメントを実行する準備をします。クエリステートメントが返されたかどうか、または影響を受ける行の数を判断するには、 num_rows (選択したステートメントに)または影響を受けた_rows(挿入、更新、削除の場合)を使用します。
この記事では、例を使用して、 mysqli :: stmt_init()の使用方法を説明し、 num_rowsとriffected_rowsを組み合わせてクエリ結果の影響を取得します。
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// 接続を確認してください
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
?>
$stmt = $mysqli->stmt_init();
$sql = "SELECT id, name FROM users WHERE status = ?";
if ($stmt->prepare($sql)) {
$status = 'active';
$stmt->bind_param("s", $status);
$stmt->execute();
$stmt->store_result(); // このステップは必須です,さもないと num_rows 常に戻ります 0
echo "返された行の数:" . $stmt->num_rows . "<br>";
if ($stmt->num_rows > 0) {
$stmt->bind_result($id, $name);
while ($stmt->fetch()) {
echo "ユーザーID: $id, 名前: $name<br>";
}
} else {
echo "基準を満たす記録はありません。";
}
$stmt->close();
} else {
echo "前処理に失敗しました:" . $stmt->error;
}
$stmt = $mysqli->stmt_init();
$sql = "UPDATE users SET status = ? WHERE last_login < ?";
if ($stmt->prepare($sql)) {
$new_status = 'inactive';
$cutoff_date = '2024-01-01';
$stmt->bind_param("ss", $new_status, $cutoff_date);
$stmt->execute();
echo "影響を受ける行の数:" . $stmt->affected_rows;
$stmt->close();
} else {
echo "前処理に失敗しました:" . $stmt->error;
}
num_rowsを使用する場合、 store_result()は呼び出す必要があります。
影響を受けた_rowsは、store_result()を呼び出すことなく直接読むことができます。
ステートメントオブジェクトを使用した後、 $ stmt-> close()を呼び出してリソースをリリースすることを忘れないでください。
エラーメッセージをデバッグまたは表示するには、 $ stmt->エラーまたは$ mysqli->エラーを使用します。
mysqli :: stmt_init()を合理的に使用し、 num_rowsとriffected_rowsを組み合わせることにより、データベースクエリのフィードバックと結果処理をより効率的に管理できます。これは、安定したPHPアプリケーションを開発するために重要です。