mySQLi füllen, bind_param() Fehler

m_topic

Mitglied
Hallo Leute
ich versuch gerade mit dem video2brain Tutorial die Grundlagen des PHPs zu erlernen.
In diesem Tutorial sind auch Codeschnipsel erhalten. So z.B steht im Kapitel „Datenbank füllen“ folgendes:


PHP:
<?php
if (isset($_POST['submit']) && isset($_POST['titel']) && isset($_POST['trainer']) && 
    isset($_POST['dauer']) && $_POST['titel'] != '' && $_POST['trainer'] != '' &&
    (int)$_POST['dauer'] > 0) {
  try {
    $db = new MySQLi('localhost', 'root', '', 'php');
    echo 'Verbindung offen.<br />';
    $sql = 'INSERT INTO trainings (titel, trainer, dauer) VALUES (?, ?, ?)';
    $kommando = $db->prepare($sql); 
    $kommando->bind_param('ssi', $_POST['titel'], $_POST['trainer'], $dauer);
		if (!$kommando) {
  		echo $db->error;
	} 
    $dauer = (int)$_POST['dauer'];
    $kommando->execute();
    echo 'SQL geschickt. <br />';
    echo $kommando->affected_rows . ' Zeilen betroffen. <br />';
    $db->close();
    echo 'Verbindung zu.<br />';
  } catch (Exception $e) {
    echo 'Fehler: ' . htmlspecialchars($e->getMessage());
  }
}
?>

HTML:
<form method="POST">
  Thema des Trainings: <input type="text" name="titel" /><br />
  Name des Trainers: <input type="text" name="trainer" /><br />
  Dauer des Trainings: <input type="text" size="2" name="dauer" /><br />
  <input type="submit" name="submit" value="Eintragen!" />
</form>

SQL:
Code:
create table trainings (
´id´ int not null auto_increment,
´titel´ varchar(50) not null,
´trainer´ varchar(50) not null,
´dauer´ int not null,
primary key(´id´)
)ENGINE=InnoDB;


Nun bekomme ich den Fehler:
Code:
Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\pr\dbs.php on line 10

Zeile 10:
PHP:
$kommando->bind_param('ssi', $_POST['titel'], $_POST['trainer'], $dauer);

Mittlerweile vermute ich dass der Fehler daran liegt da $kommando kein Objekt ist. Habe ohne erfolg nach lösungen gesucht. Ich hoffe Ihr könnt mir helfen.

Für alle Fälle habe ich meinen php.ini drangehängt, villeicht ist da was falsch konfiguriert. Ich gehe eigentlich davon aus dass diese Codeschnipsel fehlerfrei sein sollten.
 

Anhänge

Werden Dir standardmäßig alle Fehler anzeigt? Sprich Error-Reporting-Level -1 ? Mach' mal ein var_dump() auf $db und $kommando und stell das ganze hier rein.

Spontan würde ich vermuten, dass die Verbindungsdaten nicht korrekt sind.
 
Denke schon dass alle fehler angezeigt werden.
Error_reporting = E_ALL | E_STRICT
(Show all errors, warnings and notices including coding standards.)

PHP:
<?php
if (isset($_POST['submit']) && isset($_POST['titel']) && isset($_POST['trainer']) && 
    isset($_POST['dauer']) && $_POST['titel'] != '' && $_POST['trainer'] != '' &&
    (int)$_POST['dauer'] > 0) {
  try {

	  
    $db = new MySQLi('localhost', 'root', '', 'php');
    echo 'Verbindung offen.<br /><br />';
    $sql = 'INSERT INTO trainings (titel, trainer, dauer) VALUES (?, ?, ?)';
    $kommando = $db->prepare($sql);
	
	echo 'var_dump $komando: <br />';
	var_dump($kommando);
	echo '<p>';
	echo 'var_dump $db: <br />';
	var_dump($db);
	echo '<p>';

    $kommando->bind_param('ssi', $_POST['titel'], $_POST['trainer'], $dauer);
    $dauer = (int)$_POST['dauer'];
    $kommando->execute();
    echo 'SQL geschickt. <br />';
    echo $kommando->affected_rows . ' Zeilen betroffen. <br />';
    $db->close();
    echo 'Verbindung zu.<br />';
  } catch (Exception $e) {
    echo 'Fehler: ' . htmlspecialchars($e->getMessage());
  }
}
?>

Liefert:
Code:
Verbindung offen.

var_dump $komando:
bool(false)

var_dump $db:
object(mysqli)#1 (17) { ["affected_rows"]=> int(-1) ["client_info"]=> string(50) "mysqlnd 5.0.8-dev - 20102224 - $Revision: 310735 $" ["client_version"]=> int(50008) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(1054) ["error"]=> string(38) "Unknown column 'titel' in 'field list'" ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.5.16" ["server_version"]=> int(50516) ["sqlstate"]=> string(5) "42S22" ["protocol_version"]=> int(10) ["thread_id"]=> int(122) ["warning_count"]=> int(0) }


Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\pr\dbs.php on line 20

Wenn ich die Überprüfung unterhalb der Zeile
PHP:
$kommando->bind_param('ssi', $_POST['titel'], $_POST['trainer'], $dauer);
mache, kommt nur:

Code:
Verbindung offen.

Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\pr\dbs.php on line 12
 
Zuletzt bearbeitet:
Komisch, denn das Feld ´titel´ existiert eigentlich in der mySQL. Und zwar wurde es so erzeugt:

Code:
create table trainings (
´id´ int not null auto_increment,
´titel´ varchar(50) not null,
´trainer´ varchar(50) not null,
´dauer´ int not null,
primary key(´id´)
)ENGINE=InnoDB;

Muss ich villeicht die Tabelle anrest anlegen?
 

Anhänge

  • sql.jpg
    sql.jpg
    298,1 KB · Aufrufe: 19
Ich weiß nicht, ob das bei diesem Design von PhpMyAdmin gewollt ist, aber alle Spalten stehen schon in Hochkommata, bearbeite mal eine Spalte und schaue, ob die Spalte immer noch in Hochkommata steht, wenn ja entferne diese und versuch das ganze jetzt noch einmal.
 
Zurück