gebruik van mysqli

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan West

Johan West

15/04/2016 11:58:53
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
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:

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


wat betekent deze foutmelding?
Op welke manier kan ik de 2 variabelen goed vegelijken?
 
PHP hulp

PHP hulp

16/11/2024 21:22:48
 
- Ariën  -
Beheerder

- Ariën -

15/04/2016 12:04:07
Quote Anchor link
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.
Gewijzigd op 15/04/2016 12:06:15 door - Ariën -
 
Pipo Clown

Pipo Clown

15/04/2016 16:11:46
Quote Anchor link
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.
 
Team Zero

Team Zero

15/04/2016 17:02:09
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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;
}
 
Ben van Velzen

Ben van Velzen

15/04/2016 17:19:05
Quote Anchor link
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 mysqli_affected_rows te kijken of er werkelijk iets bijgewerkt is. Scheelt zinloos werk, en een mogelijke race condition.
 
Thomas van den Heuvel

Thomas van den Heuvel

15/04/2016 17:40:35
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

15/04/2016 17:55:41
Quote Anchor link
In pseudo-code staat er dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
UPDATE users
   SET active = 1
 WHERE email = $send_email
   AND activ_code = $send_active_code
   AND active = 0
 
Ben van Velzen

Ben van Velzen

16/04/2016 00:18:46
Quote Anchor link
@Ward: Precies wat ik wilde zeggen :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.