当前位置: 首页 > 知识库问答 >
问题:

(致命错误:对非对象调用成员函数bind_param())

井兴怀
2023-03-14

我得到一个错误与此文本:(对不起,我的英语不好,我来自德国!)

错误:致命错误:在第44行的/users/ftf/www/ccache.php中对非对象调用成员函数bind_param()

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.';
        }
    }

共有3个答案

邢星波
2023-03-14

错误消息调用非对象上的成员函数bind_param()。。。表示在调用对象上的bind_params()之前,未正确实例化该对象。

这可能是因为您正在尝试从$db实例化$eintarg,并且它是您的行$db=@new mysqli('localhost','ftf', '***', 'ftf');这实际上是失败的。

尝试删除“@”,然后您至少可以读取任何错误/通知/警告:

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

叶翰林
2023-03-14
  $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-string i-int还可以检查文档:http://php.net/manual/en/mysqli-stmt.bind-param.php

尉迟龙光
2023-03-14

检查您的返回值!

坏的:$einterg=$db-

好:

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

$eintrag也是如此-

此外,问题可能是您正在将占位符用引号括起来。不要那样做。MySQLi是为你做的。

 类似资料: