Я получаю сообщение об ошибке с этим текстом: (извините за мой плохой английский, я из Германии!)
Ошибка: 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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
(т. е. удалить кавычки)