Ik heb het volgende script(stukje uit het hele script)
<?php
$mysql = new PDO($db_soort.':host='.$db_host.';dbname='.$db_naam , $db_user , $db_pass , array(PDO::ATTR_PERSISTENT => true));

$currentuser = $_SESSION['m_id'];

$theroom = (int)$_GET['room'];

$sqlqueryeen = "SELECT m.username,m.member_id, m.thumb FROM member AS m, rooms AS r WHERE m.member_id = r.owner AND r.id = ".$theroom;
$prepareeen = $mysql->prepare($sqlqueryeen);
$prepareeen->execute();
$dataeen = $prepareeen->fetch();
if($dataeen['member_id'] == $currentuser)
{
$sqlquerytwee = "SELECT m.username, m.member_id, m.thumb FROM member AS m, rooms AS r WHERE m.member_id = r.joiner AND r.id = ".$theroom;
$preparetwee = $mysql->prepare($sqlquerytwee);
$preparetwee->execute();
}
?>

Ik weet dat ik beter de room kan doorsturen in de execute functie zelf, maar dat heb ik zelfs weggehaald omdat 't maar niet werkte. Deze error krijg ik:

Fatal error: Call to a member function execute() on a non-object in /var/www/vhosts/dates4jou.nl/httpdocs/chat/head.php on line 34

Dit is de lijn: $preparetwee->execute();

Nu heb ik heb al geprobeerd de eerste execute weg te commenten, en dan gewoon met if(true). Dan werkt de $preparetwee wel, maar dan werkt de eerstvolgende ->execute() weer niet. Ik vind dit heel vreemde bug xD. O ja, als ik voor iedere ->execute() m'n $mysql opnieuw definieer, dus met $db_host etc. Werkt 't weer wel. Echt heel vreemd :S

Oh, en heb ergens anders ff dit scriptje gemaakt om te testen:
<?php
$mysql = new PDO($db_soort.':host='.$db_host.';dbname='.$db_naam , $db_user , $db_pass , array(PDO::ATTR_PERSISTENT => true));
$smile = $mysql->prepare("SELECT * FROM smilies");
$rooms = $mysql->prepare("SELECT * FROM rooms");
$smile->execute();
while($a = $smile->fetch())
{
print_r($a);
}
$rooms->execute();
while($b = $rooms->fetch())
{
print_r($b);
}
?>

En dat werkt gewoon perfect. Op dezelfde host.
Verschil is dat je bij die eerste de 2e query execute terwijl je die 1e query nog aan het fetchen bent. Bij dat tweede voorbeeld execute en fetch je ze achter elkaar.

Zou het kunnen dat je die twee niet tegelijkertijd kan fetchen? Dat zou best kunnen. Misschien zijn buffered queries te oplossing, maar ik weet niet of je die vanuit PDO kan gebruiken. Anders is er nog fetchAll & foreach in plaats van while. Of een tweede verbinding.
Hmm. Probeer eens $mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); als regeltje na het verbinden. Misschien zie je dan een foutmelding.
Heel erg bedankt Jelmer:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2014 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

Heeft 't opgelost

Reageren