Ik heb een stukje code gevonden om 2 variabelen te vergelijken (afkomstig uit een activatie email) and dan de query een kolom laten updaten.

Echter de code is oorspronkelijk niet mysqli maar mysql en dus verouderd. Ik heb mysql_result met mysqli_result en mysql_query met mysqli_query vervangen.

Het werkt nog niet en ik hoop wat hulp te krijgen.

Dit is de code:


if (mysqli_result(mysqli_query("SELECT COUNT(`id`) FROM `users` WHERE `email` = '$send_email' AND `activ_code` = '$send_active_code' AND `active` = 0"), 0) == 1) {
	mysqli_query ("UPDATE `users` SET `active` = 1 WHERE `email` = '$send_email' ");
	return true;
	} else 
{ 
return false; }


de foutmelding is als volgt:

Fatal error: Call to undefined function mysqli_result() in ...


wat betekent deze foutmelding?
Op welke manier kan ik de 2 variabelen goed vegelijken?
mysqli_result() bestaat niet!. Je kan toch ook gewoon mysqli_fetch_assoc() gebruiken?
PS: Sla je mysqli_query() altijd op in een aparte variabele. Dat is makkelijker voor eventuele foutafhandeling.

Ook kan je natuurlijk de OO-manier gebruiken, en een nieuwe classe maken die de mysqli-class extend. Waarmee je de query() method overschrijft. Scheelt je weer voor elke querie een foutafhandeling te schrijven.
Hoe maak je verbinding met de database ?

Dt is bij MySQLi ook anders dan bij MySQL.

Wanneer je een MySQL verbinding maakt kan je er geen MySQLi acties op uitvoeren.
<?php

$connection = mysqli_connect('host', 'user', 'password', 'database');
if( $connection === false ){
// Geen connectie kunnen maken
}

$query ="SELECT COUNT(`id`) FROM `users` WHERE `email` = '$send_email' AND `activ_code` = '$send_active_code' AND `active` = 0";
if( ($result = mysqli_query($query)) === false ){
// Fout in query
}

$count = mysqli_num_rows($result);
if( count($count) > 0 ){
mysqli_query ("UPDATE `users` SET `active` = 1 WHERE `email` = '$send_email' ");
return true;
}else{
return false;
}
Een count() over een int? Lijkt me vreemd om te doen. Overigens lijkt het me handiger om gewoon altijd te updaten en te controleren met [php]mysqli_affected_rows[/php] te kijken of er werkelijk iets bijgewerkt is. Scheelt zinloos werk, en een mogelijke race condition.
Een count() (in PHP) in dit geval is ook verkeerd omdat:
- $count (inderdaad) geen array is, maar een integer
- een COUNT() query (in MySQL) ALTIJD 1 resultaatrij (en -kolom) oplevert, of er nu matches zijn of niet

Wellicht is het ook beter om het id op te vragen, en dit als argument voor het UPDATE statement te gebruiken in plaats van het e-mailadres.
In pseudo-code staat er dit:

if (
    SELECT COUNT(id)
      FROM users
     WHERE email = $send_email
       AND activ_code = $send_active_code
       AND active = 0
   ) {
     UPDATE users
        SET active = 1
      WHERE email = $send_email
}

Dat kun je vereenvoudigen tot één UPDATE met de WHERE-condities uit de if:

UPDATE users
   SET active = 1
 WHERE email = $send_email
   AND activ_code = $send_active_code
   AND active = 0

@Ward: Precies wat ik wilde zeggen :)

Reageren