(Неустранимая ошибка: вызов функции-члена bind_param () для не-объекта)

Я получаю сообщение об ошибке с этим текстом: (извините за мой плохой английский, я из Германии!)

Ошибка: Fatal error: Call to a member function bind_param() on a non-object in /users/ftf/www/ccache.php on line 44

Часть кода ccache.php

  // Neues Datenbank-Objekt erzeugen $db = @new mysqli( 'localhost', 'ftf', '***', 'ftf' ); // Pruefen ob die Datenbankverbindung hergestellt werden konnte if (mysqli_connect_errno() == 0) { $sql = "INSERT INTO cache ('name', 'user', 'veroefentlichung', 'beschreibung', 'FTFcode', 'STFcode', 'TTFcode', 'type', 'lat', 'lon', 'address', 'link') VALUES ('?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?')"; $eintrag = $db->stmt_init(); $eintrag = $db->prepare( $sql ); $eintrag->bind_param($titel, $user, $datum, $desc, $FTF, $STF, $TTF, $type, $Lat, $Lon, $shortdesc, $genlink); // line 44 $eintrag->execute(); // Pruefen ob der Eintrag efolgreich war if ($eintrag->affected_rows == 1) { echo 'Der neue Eintrage wurde hinzugefügt.'; } else { echo 'Der Eintrag konnte nicht hinzugefügt werden.'; } } 

  $eintrag->bind_param($titel, $user, $datum, $desc, $FTF, $STF, $TTF, $type, $Lat, $Lon, $shortdesc, $genlink); // line 44 

Вам необходимо определить тип параметров следующим образом:

 $eintrag->bind_param("ssssssiiss", $titel, $user, $datum, $desc, $FTF, $STF, $TTF, $type, $Lat, $Lon, $shortdesc, $genlink); // line 44 

s – строка i – int Также проверьте документацию: http://php.net/manual/en/mysqli-stmt.bind-param.php

Проверьте свои возвращаемые значения!

Плохо: $eintrag = $db->prepare( $sql )

Хорошо:

 if( ! $eintrag = $db->prepare( $sql ) ) { echo 'Error: ' . $db->error; return false; // throw exception, die(), exit, whatever... } else { // the rest of your code } 

То же самое касается $eintrag->execute(); ,

Кроме того, проблема, вероятно, в том, что вы обертываете свой ? заполнители в кавычках. Не делай этого. MySQLi делает это для вас.

Сообщение об ошибке. Call to a member function bind_param() on a non-object … означает, что вы неправильно создали экземпляр объекта $eintrag перед вызовом bind_params() .

Это может быть потому, что вы пытаетесь создать экземпляр $eintrag из $db , и это ваша строка $db = @new mysqli( 'localhost', 'ftf', '***', 'ftf' ); который фактически не работает.

Попробуйте удалить «@», тогда вы можете хотя бы прочитать любые ошибки / уведомления / предупреждения:

$db = new mysqli( 'localhost', 'ftf', '***', 'ftf' );

Измените код на:

 $sql = "INSERT INTO cache (name, user, veroefentlichung, beschreibung, FTFcode, STFcode, TTFcode, type, lat, lon, 'address', 'link') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

(т. е. удалить кавычки)