PHP SQL Prepared语句:对成员函数的致命错误调用

时间:2013-04-22 11:32:06

标签: php sql prepared-statement

我一直在努力让预备语句正常工作 - 但是,我一直遇到以下错误

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

1 个答案:

答案 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);