Welkom, Gast. Je bent niet ingelogd.

PDO... help!

Digital
Animestyle.nl
Geplaatst op: 10 Jan 2008, 20:35
PimpCoins: 0
💸+
Bewerken Quote

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Ga de huidige online bezoekers af en controleer hun sessie.
$online_query = "SELECT * FROM sessions";
foreach($conn->query($online_query) as $online_fetch)
{
    // Als de idle-tijd verstreken is loggen we de gebruiker uit.
    if($online_fetch['time'] < time()-300)
    {
        if($online_fetch['userid'] != '-1')
        {
            // Als de gebruiker een lid was, zetten we zijn status op offline.
            $conn->query("UPDATE members SET status='offline' WHERE id='".$online_fetch['userid']."'");
        }
        // Verwijder de sessie van de gebruiker uit de sessions tabel.
        $conn->query("DELETE FROM sessions WHERE userid='".$online_fetch['userid']."' AND ip=".$online_fetch['ip']." AND time='".$online_fetch['time']."'");
    }
}
?>

Deze code geeft deze error:

Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

Ik weet dat mensen hier PDO kunnen, dus dacht ik dat iemand hier mij misschien wel kon helpen.

Ik ben er wel achter gekomen dat hij gaat zeiken omdat ik een query in een "fetch-foreach" probeer uit te voeren.
Maar hoe ik dat kan oplossen weet ik niet

Badeendje
Pompehdompehdom
moderator
Geplaatst op: 10 Jan 2008, 20:39
PimpCoins: 0
💸+
Bewerken Quote

Je moet de eerste query volgensmij wel exec()'t hebben voordat je de volgende gaat uitvoeren volgensmij.

Mijn pdo kennis is niet zo heel fantastisch, ik zoek het nog ff voor je op

[Laatst bewerkt door Badeendje op donderdag 10 januari 2008, om 20:39]
Syncie
Geplaatst op: 10 Jan 2008, 20:48
PimpCoins: 0
💸+
Bewerken Quote

Ja, uhm. Dat zou zo moeten werken en geen error geven. Kun je even wat meer code plaatsen?

Digital
Animestyle.nl
Geplaatst op: 10 Jan 2008, 20:48
PimpCoins: 0
💸+
Bewerken Quote

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// Ga de huidige online bezoekers af en controleer hun sessie.
$online_query = $conn->prepare("SELECT * FROM sessions");
$online_query->execute();

foreach($online_query as $online_fetch)
{
    // Als de idle-tijd verstreken is loggen we de gebruiker uit.
    if($online_fetch['time'] < time()-300)
    {
        if($online_fetch['userid'] != '-1')
        {
            // Als de gebruiker een lid was, zetten we zijn status op offline.
            $query1 = $conn->prepare("UPDATE members SET status='offline' WHERE id='".$online_fetch['userid']."'");
            $query1->execute();
        }
        // Verwijder de sessie van de gebruiker uit de sessions tabel.
        $query2 = $conn->prepare("DELETE FROM sessions WHERE userid='".$online_fetch['userid']."' AND ip=".$online_fetch['ip']." AND time='".$online_fetch['time']."'");
        $query2->execute();
    }
}
?>

Zo geeft ie geen error, maar werkt ie ook niet xD

Ik gebruik overal $conn->query() ipv $conn->prepare() en execute() heeft het misschien daar iets mee te maken?

[Laatst bewerkt door Digital op donderdag 10 januari 2008, om 20:50]
Syncie
Geplaatst op: 10 Jan 2008, 20:50
PimpCoins: 0
💸+
Bewerken Quote

Wat wil je nou? Een gewone query of een prepared statement?
@ Hierboven je vergeet fetchAll() na de execute.

owja nog wat GOOGLE je errors

En leer prepared statements goed te gebruiken en kijk eens naar de method bindParam.

[Laatst bewerkt door Syncie op donderdag 10 januari 2008, om 20:52]
Digital
Animestyle.nl
Geplaatst op: 10 Jan 2008, 21:18
PimpCoins: 0
💸+
Bewerken Quote

Met een goede prepare blijkt ie het wel te doen

Ik heb nu dit:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// Ga de huidige online bezoekers af en controleer hun sessie.
$online_query = $conn->prepare("SELECT * FROM sessions");
$online_query->execute();

$online_query = $online_query->fetchAll();

foreach($online_query as $online_fetch)
{
    // Als de idle-tijd verstreken is loggen we de gebruiker uit.
    if($online_fetch['time'] < time()-300)
    {
        if($online_fetch['userid'] != '-1')
        {
            // Als de gebruiker een lid was, zetten we zijn status op offline.
            $query1 = $conn->prepare("UPDATE members SET status='offline' WHERE id=?");
            $query1->bindParam(1,$online_fetch['userid']);
            $query1->execute();
        }
        // Verwijder de sessie van de gebruiker uit de sessions tabel.
        $query2 = $conn->prepare("DELETE FROM sessions WHERE userid=? AND ip=? AND time=?");
        $query2->bindParam(1,$online_fetch['userid']);
        $query2->bindParam(2,$online_fetch['ip']);
        $query2->bindParam(3,$online_fetch['time']);
        $query2->execute();
    }
}
?>

Dank jullie voor de hulp ^^

[Laatst bewerkt door Digital op donderdag 10 januari 2008, om 21:21]
Syncie
Geplaatst op: 10 Jan 2008, 21:22
PimpCoins: 0
💸+
Bewerken Quote

Bij bindParam zou ik ook nog even het datatype van de param opgeven.
PDO:ARAM_STR;
PDO:ARAM_INT; e.d.

Digital
Animestyle.nl
Geplaatst op: 10 Jan 2008, 21:50
PimpCoins: 0
💸+
Bewerken Quote

Laad ie dan sneller?

Syncie
Geplaatst op: 10 Jan 2008, 21:57
PimpCoins: 0
💸+
Bewerken Quote

Digital schreef:

Laad ie dan sneller?

Is netter volgens mij. Maar die parameter is wel optioneel..
Is meer naar eigen wens denk ik toch...

[Laatst bewerkt door Syncie op donderdag 10 januari 2008, om 22:01]
📫

Nieuw privébericht

🔥

Registreren


Login