(Fatal error: Call to a member function bind_param() on a non-object)

浪尽此生 提交于 2019-11-27 08:03:01

问题


I get an error with this text:(sorry for my bad english I am from germany!)

Error:Fatal error: Call to a member function bind_param() on a non-object in /users/ftf/www/ccache.php on line 44

A part of the Code from 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.';
        }
    }

回答1:


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

You need to the define the type of parameters as this:

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

s - string i - int Also check documentation: http://php.net/manual/en/mysqli-stmt.bind-param.php




回答2:


Check your return values!

Bad: $eintrag = $db->prepare( $sql )

Good:

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

The same goes for $eintrag->execute();.

Also, the problem is probably the fact that you're wrapping your ? placeholders in quotes. Don't do that. MySQLi does that for you.




回答3:


The error message Call to a member function bind_param() on a non-object... means that you haven't properly instantiated the object $eintrag before calling bind_params() on it.

It could be because you are trying to instantiate $eintrag from $db, and it is your line $db = @new mysqli( 'localhost', 'ftf', '***', 'ftf' ); which is actually failing.

Try removing the '@', then you can at least read any errors/notices/warnings:

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




回答4:


Change the code to:

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

(i.e. delete the quotes)



来源:https://stackoverflow.com/questions/18921670/fatal-error-call-to-a-member-function-bind-param-on-a-non-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!