Probleme mit MySqli Prepared Statements - Call to a member function bind_param() on

Divo1984

Erfahrenes Mitglied
Hallo liebe Community,

ich stehe grad irgendwie auf dem Schlauch... Hab ne Datenbanktabelle:

id - int(12) Auto Increment
seite - varchar(255)
titel - varchar(255)
desc - varchar(255)
keys - varchar(255)

und dazu ne Klasse mit der folgenden Funktion:

PHP:
public function addSiteMetas($site, $titel, $desc, $keys){
		$stmt=$this->dbh->dbh->prepare("INSERT INTO metas (seite, titel, keys)
													VALUES(?, ?, ?)");
		$stmt->bind_param("sss", $site, $titel, $keys);
		$stmt->execute();
		if($stmt->affected_rows>0){
			return TRUE;
		}
		return FALSE;
	}

Hier der Scriptauszug, über den eingetragen werden soll:

PHP:
//MetaTags, für eine weitere Seite hinzufügen
	if($do=="add"){
		
		require_once 'class/class_MetaTags.php';
		$metas=new MetaTags();
		
		$added=FALSE;
		$error=FALSE;
		
		$name="";
		$titel="";
		$keys="";
		$desc="";
		
		$name_error="";
		$titel_error="";
		$keys_error="";
		$desc_error="";
		
		if(isset($_POST['send'])){
			//POST extrahieren für die VAlues
			extract($_POST);
			
			//Prüfe die Eingaben
			foreach($_POST as $inhalt => $wert){
				//Prüfe ob die Felder Inhalte haben
				if(empty($wert)){
					if($inhalt=="name"){
						$error=TRUE;
						$name_error="<b>Bitte einen Seitennamen eingeben.</b>";
					}elseif($inhalt=="titel"){
						$error=TRUE;
						$titel_error="<b>Bitte einen Seitentitel eingeben.</b>";
					}elseif($inhalt=="keys"){
						$error=TRUE;
						$keys_error="<b>Bitte die KeyWords eintragen.</b>";
					}elseif($inhalt=="desc"){
						$error=TRUE;
						$desc_error="<b>Bitte die Seitenbeschreibung eintragen!";
					}
				}
				//Weitere Prüfungen
				else{
					//Trifft hier vorerst nur auf das FEld "name" zu
					if($inhalt=="name"){
						
						if($metas->checkSiteExist($wert)===TRUE){
							$error=TRUE;
							$name_error="<b>Diese Seite wurde bereits eingetragen.</b>";
							
						}
					}
				}
			}
			//Prüfungen Ende-----------------------------------------------------------------
			
			//Wenn kein Fehler vorliegt, trage in die Datenbank ein
			if($error!==TRUE){
				//Versuche den Eintrag in die Datenbank vorzunehmen
				if($metas->addSiteMetas($name, $titel, $desc, $keys)===TRUE){
					$added=TRUE;
				}else{
					$ausgabe.="<center><b>Konnte den Eintrag nicht vornehmen!</b></center>\r\n";
				}
			}
		}

Wenn ich die Funktion nutze, wie ich diese oben stehen habe - kommt folgender Fehler:

Fatal error: Call to a member function bind_param() on a non-object in /home/www/web355/html/dev/class/class_MetaTags.php on line 359

wäre folgende Zeile:

PHP:
$stmt->bind_param("sss", $site, $titel, $keys);

nehme ich dir Funktion aber so:

PHP:
public function addSiteMetas($site, $titel, $desc, $keys){
		$stmt=$this->dbh->dbh->prepare("INSERT INTO metas (seite, titel)
													VALUES(?, ?)");
		$stmt->bind_param("ss", $site, $titel);
		$stmt->execute();
		if($stmt->affected_rows>0){
			return TRUE;
		}
		return FALSE;
	}

funktioniert der Eintrag, komischer Weise aber nicht, alsbald ich den dritten und vierten Parameter mit an die DB übergeben möchte. Hat jemand ne Ahnung, was das Problem sein könnte? Stehe nämlich ziemlich auf dem Schlauch grad:(
 
Zuletzt bearbeitet:
Hat sich somit erledigt, da muss irgendein Wort drin sein, was MySql als "Schlüsselwort" sieht, habe nu alles mit Backticks versehen und siehe da, es klappt;)
 
Japp ich weiß, hab ja selber schuld, was benenne ich die Spalten auch desc und keys - ist doch eigentlich logisch und abgesehen davon, würde ich durchweg mit Backticks arbeiten, was ich aus Bequemlichkeit bisher nicht gemacht habe, hätte ich mir dieses Posting hier sparen können;)
 
Zurück