我一直在努力让预备语句正常工作 - 但是,我一直遇到以下错误
<b>Fatal error</b>: Call to a member function bindParam() on a non-object on line <b>41</b><br />
我已经复制了很多教程,甚至提供的代码也没有用,并且犯了同样的错误。
我的代码如下:
$mysqli = new mysqli(connect, username,pass, datatbase);
$name = 'Tester';
if (mysqli_connect_errno()) {
echo "Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error();
}
$stmt = $mysqli->prepare("INSERT INTO Parks VALUES (null,?,?,?,?,?,?,?,?,?,?,?,?,?,Now(),?,?,?, 0, 0, 0)");
if ($stmt === FALSE) {
die ("Mysql Error: " . $mysqli->error);
}
$stmt->bind_param('ssssssssssssssss', $name, $theme, $size, $mountains, $hills, $river, $lake, $island, $setofislands, $ocean, $waterfalls, $file, $image, $description, $author,$cs);
$stmt->execute();
$stmt->close();
$mysqli->close();
导致错误的是BindParam线。
提前感谢:)
编辑:错误已解决,但是,没有数据插入数据库。 编辑:更新的查询,数据库包含VARCHAR,除了描述是LONGTEXT。最后3个是整数/双数,并且有一个当前日期字段。
答案 0 :(得分:2)
bindParam
是PDO功能。您使用的是mysqli,请尝试使用bind_param
。你有'name'的地方也应该是类型定义,所以你需要's'作为字符串。
E.g:
$stmt->bind_param('s', $name);
编辑:虽然这样说,但错误并不是说功能不正确。它说对象不存在......运行它可以为您提供有关准备失败原因的信息。
$stmt = $mysqli->prepare("INSERT INTO 'Parks' VALUES(null, ?");
if ($stmt === FALSE) {
die ("Mysql Error: " . $mysqli->error);
}
由于SQL不正确,我很可能准备失败(我的猜测是桌面名称'Parks'不应该是qutoes)
编辑2:我的猜测仍然无效:
$stmt->bindParam('name', $name);
你有'name'的地方实际上应该是变量类型,如integer,double,string等。这样数据库就知道你的变量是什么。
尝试用以下代码替换该行:
$stmt->bindParam('s', $name);