mysql Abfrage geht nicht

taurin

Erfahrenes Mitglied
hi, sry das ich schon wieder schreibe, aber ich verzweifle schon seit heut morgen an einer Abfrage.
Das Programm ist auf 3 Datein aufgeteilt.
1:
PHP:
include $pfad."datei.php";
$komplett = news::news_alle_load($start);
navAusgabe($aktuell, $komplett, $link)
Hier findet die eigenliche Ausgabe statt.

2:
PHP:
$aktuell = htmlentities(trim($_GET['site']));
if(empty($aktuell))
	$aktuell = 1;
$start = $aktuell * news::$max - news::$max; 
		
function navi($komplett,$aktuell){
	$anzahl = 4;
	
	if($komplett != 1){
		if($aktuell > 1){
			$link .= '<a href="?s=23&amp;site=1"><<</a>&nbsp;&nbsp;';
			$link .= '<a href="?s=23&amp;site='.($aktuell-1).'"><</a>&nbsp;&nbsp;';
		}
		
		for($x=$aktuell-$anzahl;$x<=$aktuell+$anzahl;$x++){
			if(($x>0 && $x<$aktuell) || ($x>$aktuell && $x<=$komplett))
				$link .= '<a href="?s=23&amp;site='.$x.'">'.$x.'</a>&nbsp;&nbsp;';
			if($x==$aktuell)
				$link .= $x . '&nbsp;&nbsp;';
		}
		
		if($aktuell < $komplett){
			$link .= '<a href="?s=23&amp;site='.($aktuell+1).'">></a>&nbsp;&nbsp;';
			$link .= '<a href="?s=23&amp;site='.$komplett.'">>></a>&nbsp;&nbsp;';
		}
	}
	return $link;
}
	
function navAusgabe($aktuell, $komplett, $link){
	$insert .= "
				<div class='seitenNav'><br />\n
				Seite " .$aktuell." von ".$komplett."<br />\n".
				$link .= navi($komplett,$aktuell). "<br />\n
				</div><br />\n</div>";
	
	print $insert;
}
Hier wird geschaut, auf welcher Seite man sich befindet und gibt auch die Seiten Navigation aus. Ist denke ich nicht wichtig, hab ich aber der Vollständigkeit halber mit gepostet.

3:
PHP:
class news{
	public static $max = 10;
	
	function news_load(){
		global $dbpf, $connect;
		
		$news = $connect->prepare("SELECT * FROM ".$dbpf."news ORDER BY date DESC LIMIT 4");
				if($news) print "ok";
		else print "nein";
		$news->execute();
		$news->bind_result($date, $head, $content);		
		
		while($row = $news->fetch()){
			$date_db = $date;
			list($year, $month, $day) = split('-', $date_db);
			$date_out = "$day.$month.$year";
			$date_start = substr($date_out, 0, 2);
			$date_end = substr($date_out, -8);
			$date_out = $date_start.$date_end;
			
			print 
			"<fieldset>
				<legend>".$head."</legend>
				<label>".$content."</label>
				<p>".$date_out."</p>
			</fieldset>";
		}
	}
	
	function news_alle_load($start){ // in der funktion ist der fehler
		global $dbpf, $connect;
//      LIMIT $start, ".self::$max :::::: wenn ich das einsetze anstatt LIMIT ?, ? geht es auch nicht
		$links = $connect->prepare("SELECT * FROM ".$dbpf."news ORDER BY date DESC LIMIT ?, ?");
		if($links) print "ok";
		else print "nein"; // das wird immer ausgegeben bei den anderen abfragen ist dies nicht anders
		$links->bind_param($start, self::$max);
		$links->execute();
		$links->bind_result($date, $head, $content);

		$gesamt = $connect->query("SELECT head FROM ".$dbpf."news"); 
		$eintrag = $gesamt->num_rows;
		$insgesamt = $links->num_rows;

		$komplett = ceil($eintrag / self::$max);
		$news_alle .= "<div class='news'><form>";
		while($links->fetch()){
			$news_alle .= 
						"<fieldset>\n
							<legend>".$head."</legend>\n
							<label>".$content."</label>\n
							<p>".$date."</p>\n
						</fieldset><br />\n";
		}
		$news_alle .= "</form>\n";
		$news_alle .= "<p>Insgesamt sind ".$insgesamt." News-Eintr&auml;ge vorhanden.</p>";
		print $news_alle;
		
		return $komplett;
	}
}
Das ist die Datei für die News. Das erste geht, aber das zweite nicht. Hier kann keine Abfrage gemacht werden, sie sind immer false. Nur warum ist das so, da doch die andere funktioniert?
Über Tipps würde ich mich sehr freun.
lg
 
Was genau geht nicht? Das 2te Script? Im 2ten Script die 2te Abfrage? Die 2te Methode deiner Klasse?
Kommt eine Fehlermeldung?

Noch ein Tipp:
Wennd u mit bind_result arbeitest, solltest du im SELECT die Spalten fix angeben und nicht mit * auswählen. Ansonsten funktioniert gar nix mehr, wenn die Spalten mal in einer anderen Reihenfolge aus der DB kommen
PHP:
        $links = $connect->prepare("SELECT data, head, content FROM ".$dbpf."news ORDER BY date DESC LIMIT ?, ?");
 
Das ging ja schnell^^ also es geht in Funktion news_alle_load($start) gar nix. Keine einziga Abfrage geht. Es gibt auch keine Fehler, sondern es ist immer false. Egal wie ich eine Abfrage mache egal was ich Abfrage immer false. Deswegen komm ich auch nicht weiter, weil ich es nicht verstehe.
@ yaslow
Danke für den Tipp, werde ich umstellen.
 
Hi,

wandel mal das hier

PHP:
$links = $connect->prepare("SELECT * FROM ".$dbpf."news ORDER BY date DESC LIMIT ?, ?");
if($links) print "ok";
else print "nein";

in das hier um:

PHP:
$links = $connect->prepare("SELECT * FROM ".$dbpf."news ORDER BY date DESC LIMIT ?, ?");
if($links) print "ok";
else print $connect->error;

Dann sollte dort auch der Grund stehen warum da false raus kommt.

Best regards
 
habe 2 Fehlermeldungen:
Warning: mysqli::prepare() [mysqli.prepare]: All data must be fetched before a new statement prepare takes place innews.php on line 35

Fatal error: Call to a member function bind_param() on a non-object in news.php on line 39

Jetzt weiß ich aber nicht, wie ich diese weg bekomme.
 
Also die erste Fehlermeldung besagt, dass du da ein vorheriges Statement auf der selben Connection nicht komplett durchlaufen hast. Du solltest dir womöglich angewöhnen deine Statements immer zu schließen (mysqli_stmt::close), wenn du sie nicht mehr brauchst. Der zweite Fehler ist sicherlich ein Folgefehler.
 
hmm habe jetzt mit $news->close(); und $connect->close(); mal alles geschlossen, geht trotzdem noch nicht. habe es auch ohne $connect->close(); probiert.
 
$connect->close() lässt dich wohl eher vor eine Wand rennen.. :) Keine Verbindung, keine Queries!

Wird irgendwo vorher im Programmablauf noch ein Query ausgeführt?
 
Zurück