Goedemiddag,

Sinds vandaag gebruik ik PDO. Vandaar dat ik een paar vraagjes heb waarvan ik het antwoord niet kon vinden.

Dit is de code die ik op dit moment gebruik

<?
$mysql = new PDO("mysql:host=localhost;dbname=dbname", 'root', 'ww');
$query = $mysql->prepare("SELECT count(*) FROM users WHERE mail = :mail");
$query->bindParam(':mail', $mail);
$query->execute();
$num_rows = $query->fetch(PDO::FETCH_NUM)[0];
if($num_rows > 0) {
    $query = $mysql->prepare("UPDATE users SET activation_key = :key, token = :token, is_activated = :activated WHERE mail = :mail");
} else {
    $query = $mysql->prepare("INSERT INTO users (mail, activation_key, token) VALUES (:mail, :key, :token)");  
}
                    
$query->bindParam(':mail', $mail);
$query->bindParam(':key', $key);
$query->bindParam(':token', $token);
$query->execute();
?>


De twee vragen die ik heb,
- Hebben jullie over het algemeen tips, hoe ik deze code kan optimaliseren?
- Als $num_rows meer dan 0 is, staat er in $query `:activated`, dit moet echter altijd 'false' zijn, hoe kan ik dit op de beste manier doen? Ik verwacht dat er een betere manier bestaat dan

<?
$false = 'false';
$query->bindParam(':activated', $false);
?>


Alvast bedankt,
Pepijn

P.S. Ik heb erg moeten twijfelen of ik deze vraag in `Beginnen met PHP` of `Algemene PHP scripting en meer` moest zetten, maar aangezien iedere (beginnende) webdeveloper tegenwoordig PDO kan, heb ik deze vraag in dit forum gezet :)
Ten eerste kan je die queries aanpakken. Gezien het feit dat je selecteert op 'mail' ga ik ervanuit dat je daar een unieke index op hebt staan. Zo ja, dan kan je het hele zaakje in 1 query uitvoeren:

INSERT INTO users (mail, activation_key, token)
VALUES (:mail, :key, :token)
ON DUPLICATE KEY UPDATE
  activation_key = VALUES(key),
  token = VALUES(token)
  is_activated = :activated;

Deze query zal een nieuwe user invoeren, of, als het mailadres al bestaat, de betreffende user updaten. In dit geval worden dan de key en token gebruikt die waren opgegeven voor de insert.

Reageren