我收到这个文字的错误:(抱歉我的英文不好,我来自德国!)
错误: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.';
}
}
答案 0 :(得分: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为你做到了。
答案 1 :(得分: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 - 字符串 我 - int 另请查看文档:{{3}}
答案 2 :(得分:2)
错误消息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' );
答案 3 :(得分:1)
将代码更改为:
$sql = "INSERT INTO cache
(name, user, veroefentlichung, beschreibung, FTFcode, STFcode, TTFcode, type, lat, lon, 'address', 'link')
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
(即删除引号)