mysqli und bind param

JesusFreak777

Erfahrenes Mitglied
Hey Leute,

irgendwie stell ich mich mal wieder an oder so...

ich möchte einen MySQL Eintrag machen und habe das so gelöst:

PHP:
			$sql = 'INSERT INTO `robot` (`date`, `dealer`, `customer`, `robot`, `serial`, `password`, `stockpl`, `failure` ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
			$eintrag = $db->prepare( $sql );
			$eintrag->bind_param("sssssiss", date('Y-m-d'), $_REQUEST['dealer'], $_REQUEST['customer'], $_REQUEST['robot'], $_REQUEST['serial'], $_REQUEST['password'], $_REQUEST['row'].$_REQUEST['col'], $_REQUEST['bug']);
			$eintrag->execute();

zurück bekomme ich
Fatal error: Call to a member function bind_param() on a non-object in functions.php on line 37 (das ist die zeile mit bind_param)

wo ist mein denkfehler?
-> ich hab verstanden das $db->prepare( $sql ); kein objkt ist mit dem bind param möglich ist,... aber wie dann?

Vielen Dank
 
Ich versteh das so, dass $db->prepare() nicht funktioniert hat und darum kein Objekt zurückgegebn hat.
mysqli_prepare() returns a statement object or FALSE if an error occurred.

Lass dir mal mehr Fehler ausgeben
¨
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);
 
Hallo,

mehr als:
Fatal error: Call to a member function bind_param() on a non-object in \classes\functions.php on line 37

wird nicht zurück gegeben :/

PHP:
		$db = @new mysqli($sq_con['host'], $sq_con['user'], $sq_con['password'], $sq_con['db']);
		if(mysqli_connect_errno() == 0) {


			$sql = 'INSERT INTO `robot` (`date`, `dealer`, `customer`, `robot`, `serial`, `password`, `stockpl`, `failure` ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
			$eintrag = $db->prepare( $sql );
			$eintrag->bind_param("sssssiss", 
				date('Y-m-d'), 
				$_REQUEST['dealer'], 
				$_REQUEST['customer'], 
				$_REQUEST['robot'], 
				$_REQUEST['serial'], 
				$_REQUEST['password'], 
				$_REQUEST['row'].$_REQUEST['col'], 
				$_REQUEST['bug']);
			$eintrag->execute();
 
so, ich hab das ganze jetzt nochmal formschöner umgebaut und siehe da, es geht immer noch nicht :(

PHP:
		$db = @new mysqli($sq_con['host'], $sq_con['user'], $sq_con['password'], $sq_con['db']);
		if(mysqli_connect_errno() == 0) {


			$sql = 'INSERT INTO `robot` (
				`date`, 
				`dealer`, 
				`customer`, 
				`robot`, 
				`serial`, 
				`password`, 
				`stockpl`, 
				`failure`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
			if( $eintrag = $db->prepare($sql) ) { 
				 
				$eintrag->bind_param("sssssiss", 
					'Y-m-d', 
					'dealer', 
					'customer', 
					'robot', 
					'serial', 
					1234, 
					'row', 
					'bug');
				$eintrag->execute(); 
			} else { 
				return "es ist ein fehler beim prepare statement aufgetreten"; 
			}


wie Yaslaw schon vermutet hat, liegt es vermutlich an "$eintrag = $db->prepare($sql)"... aber was ist da falsch?

ich will doch nur Daten in die Datenbank eintragen,... das kann doch nicht so schwer sein :(

Danke für jede Hilfe
 
nimm beim @new mysqli mal das @ weg. Das ist eine Unsitte mit der Fehler einfach ignoriert werden.
Vor allem testest du nachher prozudeal und nicht auf das Objekt ob die Verbindung funktioniert hat. Ob dieser Funktionsaufruf einen Fehler im Anlegen des Objektes ausweist weiss ich nicht. Aber mit dem @ hast du einen direkten Fehler verhindert

PHP:
 $db = new mysqli($sq_con['host'], $sq_con['user'], $sq_con['password'], $sq_con['db']);
if)if($db->connect_errno() == '') { 
    //TODO: Verbindung steht
}else{
    //TODO: Verbindung misslungen
}

Es kann also sein, dass beireits beim anlegen von ädb ein Fehler aufgetretten ist und du es nicht gemerkt hast.
 
hm ja,...

ordentlich arbeiten hilft!

vielen Dank,...

noch was anderes,... wie kann ich herausfinden wo mein autoincrement steht in php

sozusagen eine ausgabe -> Autoincrement: 2136
dann weiß ich das die nächste id 2137 ist!

Vielen Dank
 
Nimm das letzte ud adiere 1.
Aber es stimmt eh nur bedingt. Wenn du weisst welches das nächste ist und jemand anderes gerade ein Eintrag macht, dann hast du bis zu deinem Eintrag ein falsches. Arbeite immer eerst nach dem INSERT mit der aktuellen ID
 
Zurück