ホームページ > データベース > mysql チュートリアル > データベース クエリの結果を確認するときに「ブール型の値の配列オフセットにアクセスしようとしています」というエラーが表示されるのはなぜですか?

データベース クエリの結果を確認するときに「ブール型の値の配列オフセットにアクセスしようとしています」というエラーが表示されるのはなぜですか?

Linda Hamilton
リリース: 2024-11-16 09:06:03
オリジナル
530 人が閲覧しました

Why am I getting the

エラー: "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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート