エラー: "Bool 型の値の配列オフセットにアクセスしようとしています"
このコード スニペットでは、 $nameRes 配列と $emailRes 配列の Username キーと Email キーを使用して、それらがユーザー入力と一致するかどうかを確認します。ただし、「ブール型の値の配列オフセットにアクセスしようとしています。」というエラーが発生します。
原因
このエラーは、データベース クエリがブール値を返すときに発生します。データベース内に一致があるかどうかを示す値 (通常は true または false)。一致するものがない場合、クエリは false を返します。あなたの場合、データベースが一致するユーザー名または電子メールを見つけられない場合、 false を返し、$nameRes または $emailRes 配列をブール値にします。
Solution
この状況に対処するにはいくつかの方法があります:
1. Null または空の結果を確認する
ユーザー名または電子メール キーにアクセスする前に、配列が null または空であるかどうかを確認します。
if ($nameRes && !empty($nameRes['Username']) { // Proceed with username check }
2.デフォルト値を使用する
レコードがデータベースに存在するかどうかを気にしない場合は、キーにデフォルト値を割り当てます:
$name = $nameRes['Username'] ?? ''; $email = $emailRes['Email'] ?? ''; if ($name == $_POST['username']) { // Proceed with username check }
3. PDO の FetchColumn
を使用する PHP で行全体をフェッチして比較する代わりに、 fetchColumn() を使用して一致する行の数のみをフェッチします。これは単一の値 (0 またはゼロ以外の整数) を返します。これは if ステートメントで使用できます:
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username"); $query->execute([':Username' => $name]); if ($query->fetchColumn()) { // Proceed with username check }
4。単一のクエリを使用する
OR 条件を使用すると、ユーザー名と電子メールのチェックを単一のクエリに結合できます:
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username OR Email = :Email"); $query->execute([':Username' => $name, ':Email' => $email]); if ($query->fetchColumn()) { // Proceed with username/email check }
以上がデータベース クエリの結果を確認するときに「ブール型の値の配列オフセットにアクセスしようとしています」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。