PHP で「ブール型の値の配列オフセットにアクセスしようとしています」というエラーが発生した場合は、コードが配列ではない値から配列要素を取得するには、この場合はboolean.
提供されたコードでは、ユーザー名と電子メールに基づいてユーザーのデータベースをクエリしています。結果を受け取ったら、データベースの応答と登録フォームからの入力を比較して、ユーザー名または電子メールがすでに存在するかどうかを確認します。
ただし、データベース クエリが条件に一致するレコードを返さない場合、エラーが発生します。その結果、$emailRes (および $nameRes) は連想配列ではなくブール値 (false) になります。その結果、ブール値の配列オフセットにアクセスできないため、$emailRes['Email'] にアクセスするとエラーがスローされます。
データベース結果の確認:
最も簡単な解決策は、$emailRes にアクセスする前に、まずデータベース クエリが結果を返すかどうかを確認することです。 array.
$emailRes = $query->fetch(PDO::FETCH_ASSOC); if ($emailRes) { // Proceed to use $emailRes }
デフォルト値を指定します:
データベースが何かを返したかどうかを気にしない場合は、デフォルト値を指定できます。
$emailRes = $query->fetch(PDO::FETCH_ASSOC); $email = $emailRes['Email'] ?? ''; // Default: empty string
代替案アプローチ:
より良い方法は、PDO の rowCount() メソッドまたは fetchColumn() メソッドを使用してデータベース内の行の存在を確認し、ブール結果の可能性を回避することです。
$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username = :Username"); $query->execute([':Username' => $name]); if ($query->fetchColumn()) { throw new \Exception("Username is already in use!"); }
データをフェッチする代わりに行数をチェックすることで、ブール値の結果を受け取る可能性を排除し、「配列オフセット」が発生しないようにします。ブール値」エラー。
以上がPHP コードで「ブール型の値の配列オフセットにアクセスしようとしています」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。