• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

prepared statement fehler

krackmoe

Neues Mitglied
Ich find den Fehler einfach nicht. Könntet ihr mir da bitte helfen?

Ich erstelle mir eine Funktion wo ich eine Verbindung zur Datenbank aufbaue und returne dann das Objekt.

PHP:
function db_connect(){
		$sqlConnection = new mysqli(
	            "localhost",      //Host
	            ""//Benutzer
	            "",      //Passwort
	            ""        //Datenbank
	            );
	    if(mysqli_connect_errno()){
	    	printf("Connect failed: ".mysqli_connect_error());
	    	exit();
	    }
     	return $sqlConnection;
	}

PHP:
if(isset($_POST['up'])){			
		$conid = db_connect();

		$stmt = $conid->prepare("UPDATE Blog SET title=?, name=? WHERE id = ?"){
			$title = $_POST['titel'];
			$text = $_POST['desc'];
			$id = $_POST['id'];
	
			$stmt->bind_param("ssi", $title, $text, $id);
			$stmt->execute();
			$stmt->close();
		}
	}

Hier liefert mir die prepare Zeile wo ich das Update mache IMMER false zurück und ich weiß nicht warum.
Die Werte title, name entsprechen denen in der Datenbank. Ich find hier keinen Fehler!?
Und die POST Werte werden auch korrekt übermittelt.
 
PHP:
if(isset($_POST['up'])){            
        $conid = db_connect();

        $title = $_POST['titel'];
        $text = $_POST['desc'];
        $id = $_POST['id'];

        $stmt = $conid->prepare("UPDATE Blog SET title=?, name=? WHERE id = ?");
        $stmt->bind_param("ssi", $title, $text, $id);

        $stmt->execute();
        $stmt->close();
        
    }
 
Ah da waren ein paar Fehler drin, vergessen die Klammern rauszugeben.
Das ändert leider nix daran das es nicht geht..

Kommt immer die Meldung: Call to a member function bind_param() on a non-object

Weil ich einen boolean Wert zurückbekomme.. und zwar false..
 
PHP:
if(isset($_POST['up'])){            
    $conid = db_connect();

    $title = $_POST['titel'];
    $text = $_POST['desc'];
    $id = $_POST['id'];
  
    $stmt = $conid->prepare("UPDATE Blog SET title=?, name=? WHERE id = ?");

    if($stmt === false) {
        die(mysqli_error($conid));
    }

    $stmt->bind_param("ssi", $title, $text, $id);
    $stmt->execute();
    $stmt->close();
}
 
Ich lass mir das jetzt so ausgeben:

Code:
 if($stmt == false) {
	        die("Coonnection error".mysqli_error($dbConn));
	    }

Fehlermeldung die ausgeben wird = Coonnection error

Sonst gar nix.

Aber er hat Zugriff zur Datenbak und er bekommt ein gültiges Datenbankobjekt.
In anderen Funktionen benutz ich das ja genauso.
 
PHP:
function db_connect(){
        $sqlConnection = new mysqli(
                "localhost",      //Host
                ""//Benutzer <---------------------------------- , vergessen
                "",      //Passwort
                ""        //Datenbank
                );
        if(mysqli_connect_errno()){
            printf("Connect failed: ".mysqli_connect_error());
            exit();
        }
         return $sqlConnection;
    }
 
LoL ich hab den Fehler.

Ich hab mir das 10.000 mal angesehen hab aber keinen Fehler gefunden und jetzt seh ich ihn!

Ich schreib im Update "name = ?"

Wtf ist Name??? :) Das hätte "text" heißen müssen.

Bin so dumm.

Danke!
 
da fehlte ein komma...

PHP:
function db_connect() {
	$sqlConnection = new mysqli(
                "localhost",	//Host
                "",				//Benutzer
                "",      		//Passwort
                ""       		 //Datenbank
	);
	
	if($sqlConnection->connect_error){
		die('Connect Error ('.mysqli_connect_errno().') '.mysqli_connect_error());
	}
	
	return $sqlConnection;
}

if(isset($_POST['up'])) {
	$conid = db_connect();

	$title = $_POST['titel'];
	$text = $_POST['desc'];
	$id = $_POST['id'];

	$stmt = $conid->prepare("UPDATE Blog SET title=?, name=? WHERE id = ?");

	if($stmt === false) {
		die('Query Error ('.mysqli_errno($conid).')'.mysqli_error($conid));
	}

	$stmt->bind_param("ssi", $title, $text, $id);
	$stmt->execute();
	$stmt->close();
}

probiers damit und wenns nicht geht sag bitte die genaue fehlermeldung und könnte es vielleicht daran liegen das du dem das feld "name" mit einem text befüllen willst der warscheinlich viel zu lang für das feld ist?

in deinem query steht

title, name, id
du bindest aber
$title, $text, $id
 
Es geht schon Danke!

Nur jetzt kommt gleich der nächste Fehler.. das könnt glaub ich ein Bug sein!?

PHP:
$stmt = $dbConn->prepare("UPDATE Blog SET title = ?, text = ? WHERE id = ?");
 $stmt->bind_param('ssi', $title, $text, $id);

Hier sagt er mir:
Number of variables doesn't match number of parameters in prepared statement

Ich mein eigentlich kann ich zählen :P
 
Zurück
Oben