mysql Abfrage geht nicht

Es geht um den Programmablauf, nicht nur um die Klasse. Wenn du bspw. vorher in einer anderen Klassen bereits den Fehler hast, wirkt sich das in dem Fall auch auf diese Klasse aus.

PHP:
class A {
  public function do() {
    global $connect;
    $stmt = $connect->prepare("...");
    // Kein fetch oder close hier
  }
}

class B {
  public function foo() {
    global $connect;
    $stmt = $connect->prepare("...");
    // ...
    $stmt->close();
  }
}

$objA = new A();
$objB = new B();

$objA->do();
...
$objB->foo(); // <- hier tritt dann ein Fehler auf, weil in do() das Statement nicht geschlossen wurde
 
Moin, ich habe jetzt alle Abfragen geschlossen und überprüft, jedoch besteht der Fehler weiterhin. Habe jetzt sogar noch eine Abfrage gefunden die das selbst prob hat.
PHP:
$sel_num = $connect->prepare("SELECT count(umfrage) AS num, umfrage FROM ".$dbpf."umfrage_title GROUP BY umfrage");
PHP:
$links = $connect->prepare("SELECT date, head, content FROM ".$dbpf."news ORDER BY date DESC LIMIT ?, ?");
der Fehler ist:
Warning: mysqli::prepare() [mysqli.prepare]: All data must be fetched before a new statement prepare takes place in news.php on line 34 bzw. umfrage.php
Was kann ich noch probieren um es ans laufen zu bekommen?
lg
 
ich habe jetzt ein Skript gefunden, an dem vllt jmd den Fehler erkennen kann.
Es sind 2 Dateinen:
1:
PHP:
<?php 
include "umfrage.php"; 
?>
<div class="diagramm">	
	<?php
		$sel_head = $connect->prepare("SELECT head FROM ".$dbpf."umfrage_head");
		$sel_head->execute();
		$sel_head->bind_result($head);
		$zahl = $sel_head->num_rows;
		while($sel_head->fetch()){
			$des[] = "<h3>".$head."</h3>";
		}
	
		for($i=0;$i<=($zahl-1);$i++){			
			print $des[$i];
		
			$diagramm1 = new diagramm;
			$diagramm1->umfrage_nr = $num_title[$i];
			$diagramm1->umfrage_num = $nr_title[$i];
			$diagramm1->umfrage_title = $umfrage_title[$i+1];
			$diagramm1->query();
		}
		$sel_head->close();
	?>
</div>

2:
PHP:
<?php
global $dbpf;
$erfolg;

$sel_num = $connect->prepare("SELECT count(umfrage) AS num, umfrage FROM ".$dbpf."umfrage_title GROUP BY umfrage");
if($sel_num) print "ok1";
else print "nein";
$sel_num->execute();
$sel_num->store_result();
$sel_num->bind_result($num, $umfrage);
while($sel_num->fetch()){
	$num_title[] = $umfrage;
	$nr_title[] = $num;
}
$sel_num->close();

$num_title_load = count($num_title);
for($i=0;$i<=count($num_title)-1;$i++){
	$um_title = $connect->prepare("SELECT title FROM ".$dbpf."umfrage_title WHERE umfrage = ?");
	$um_title->bind_param("i", $num_title[$i]);
	$um_title->execute();
	$um_title->bind_result($title);
	while($um_title->fetch()){
		$umfrage_title[$umfrage][] = $title;
	}
	$um_title->close();
}

if(isset($_POST['umfrage_1_senden'])){
	if(isset($_POST['zufrieden']) && isset($_POST['num']) && isset($_SESSION['ok']) && $_SESSION['ok'] == TRUE && !isset($_SESSION['umfrage_ok'])){
		$ok = mysql_query("INSERT INTO ".$dbpf."umfrage VALUES ('{$_POST['num']}', '{$_POST['zufrieden']}')");
		if($ok == TRUE){
			$erfolg = "<h3>Deine Stimme wurde erfolgreich eingetragen.</h3>";
			$_SESSION['umfrage_ok'] = TRUE;
		}else $erfolglos = "<h3>Ein Fehler ist aufgetretten. Bitte versuche es erneut.</h3>";
	}else if($_SESSION['ok'] == FALSE){
		$erfolglos = "<h3>Du bist nicht eingeloggt. Wenn du mit abstimmen m&ouml;chtest, logge dich bitte ein.</h3>";
	}else if($_SESSION['umfrage_ok'] == TRUE && empty($erfolg)){
		$erfolglos = "<h3>Du hast bereits abgestimmt.</h3>";
	}else{
	 	$error = "Ein unvorhergesehender Fehler ist aufgetretten. Bitte versuche es erneut. Sollte der Fehler weiterhin auftretten, wende dich bitte an den Administrator.";
	}
}
?>
Diese Abfrage
PHP:
$sel_num = $connect->prepare("SELECT count(umfrage) AS num, umfrage FROM ".$dbpf."umfrage_title GROUP BY umfrage");
wird an 2 Stellen aufgerufen. Einmal in der Datei die 1, also das erste beispiel und dann noch ein der Datei:
PHP:
<?php 
include "umfrage.php"; 
global $dbpf;
?>
<div class="umfragen">
<?php if(isset($erfolg) && !empty($erfolg)){
	print "<span class='erfolg'>".$erfolg."</span>"; 
}else if(isset($erfolglos) && !empty($erfolglos)){
	print "<span class='erfolglos'>".$erfolglos."</span>"; 
}else if(isset($error) && !empty($error)){ 
	print "<span class='erfolglos'>".$error."</span>";
}

$num_um = $connect->prepare("SELECT head FROM ".$dbpf."umfrage_head ORDER BY num DESC LIMIT 1");
$num_um->execute();
$num_um->bind_result($head);
while($num_um->fetch()){
	print "<p style='margin-bottom:10px;'>".$head."</p>";
?>
<form action="" method="post" class="f1">
<?php
	for($u=0;$u<=end($nr_title)-1;$u++){
		print "<label for='".$u."'>".$umfrage_title[$num_title_load][$u]."</label>\n
		<input type='radio' value='".($u+1)."' name='zufrieden' class='right' id='".$u."' /><br />\n";
	}
	print "<input type='hidden' value='".$num_title_load."' name='num' />\n";
}
$num_um->close(); ?>
	<input type="submit" value="Senden" name="umfrage_1_senden" class="both" style="float: left;" />
</form>
<div class="both"></div>
<a href='index.php?s=30'>Zum Ergebnis</a>
</div>
In dieser Läuft auch alles wunderbar.
Das Prob besteht hierbei nur in der Datei, in der das diagramm instanziiert wird.
Woran kann das liegen? Es kann doch nicht sein, das in momentan 3 Abfragen dieser Fehler auftaucht aber in sonst keiner. Von einer nicht geschlossenen Verbindung oder eines nicht ausgeführten fetchs kann es ja nicht kommen, sonst wäre der Fehler ja bei mehreren Abfragen oder nicht? Ich habe schon sehr viel gegoogled, aber nix brauchbares gefunden. Habe wohl was von store_result gelesen, habs auch probiert hat aber nich geklappt. vllt habe ichs auch falsch gemacht. vllt kann mir ja dazu jmd auch einen Tipp geben.
Hoffe es kann mir jmd bei meinem Prob helfen.
lg
 
Zurück