1

我一直在尝试使准备好的语句正常工作-但是,我一直遇到以下错误

<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 个是整数/双精度数,并且有一个当前日期字段。

4

1 回答 1

2

bindParam是 PDO 函数。您正在使用 mysqli,所以请尝试bind_param。你有'name'的地方也应该是类型定义,所以你需要's'作为字符串。

例如:

$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'的地方实际上应该是变量类型,如整数、双精度、字符串等。这样数据库就知道你的变量是什么了。

尝试将该行替换为:

$stmt->bindParam('s', $name);

于 2013-04-22T11:34:11.480 回答