4

次のテキストでエラーが表示されます:(英語が下手で申し訳ありません。私はドイツ出身です!)

エラー: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.';
        }
    }
4

4 に答える 4

5

戻り値を確認してください!

悪い:$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 がそれを行います。

于 2013-09-20T16:39:24.153 に答える
3
  $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

于 2013-10-12T11:53:01.227 に答える
2

エラー メッセージ... は、オブジェクトを呼び出す前Call to a member function bind_param() on a non-objectにオブジェクトを適切にインスタンス化していないことを意味します。$eintragbind_params()

$eintragからインスタンス化しようとしている可能性があり、実際に失敗し$dbているのはあなたの行です。$db = @new mysqli( 'localhost', 'ftf', '***', 'ftf' );

「@」を削除してみてください。少なくともエラー/通知/警告を読むことができます:

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

于 2013-09-20T16:54:36.240 に答える