sql >> Database >  >> RDS >> Mysql

Proberen toegang te krijgen tot array-offset op waarde van type bool

U krijgt deze foutmelding waarschijnlijk omdat er geen records in de database zijn gevonden die aan uw criteria voldoen.

De eenvoudigste manier om deze fout op te lossen, is door eerst te controleren of de database iets heeft geretourneerd.

$emailRes = $query->fetch(PDO::FETCH_ASSOC);
// VVV - Here I am checking if there was anything returned and then I check the condition
if($emailRes && $emailRes['Email']==$_POST['email']) {
    // ...
}

Als het u niet uitmaakt of de database iets heeft geretourneerd, kunt u eenvoudig een standaardwaarde opgeven. Bijvoorbeeld:

$emailRes = $query->fetch(PDO::FETCH_ASSOC);
$email = $emailRes['Email'] ?? ''; // default: empty string

De juiste manier om te controleren op bestaan ​​in DB met behulp van PDO is:

$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!");
}

$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Email =:Email");
$query->execute([':Email' => $email]);
if ($query->fetchColumn()) {
    throw new \Exception("Email is already in use!");
}

In plaats van de rij op te halen en de vergelijking opnieuw uit te voeren in PHP, haal ik een telling van overeenkomende rijen uit de database en ik gebruik die telling als een boolean in de if uitspraak. fetchColumn() haalt een enkele kolom op uit de eerste rij en als ik COUNT(*) . gebruik Ik weet dat er altijd één rij zal zijn.

Je kunt het ook in één zoekopdracht doen:

$query = $pdo->prepare("SELECT COUNT(*) FROM Users WHERE Username =:Username OR  Email =:Email");
$query->execute([':Username' => $name, ':Email' => $email]);
if ($query->fetchColumn()) {
    throw new \Exception("Username or email is already in use!");
}



  1. Standaard tekencodering van SQL Server

  2. DevOps Database Woordenlijst voor de MySQL-beginner

  3. Een GeoJson maken in php vanuit MySql om te gebruiken met MapBox javascript API

  4. Zoeken op expressie-indexen