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

Php 致命错误:在非对象行上调用成员函数bind_param(),php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我看到过类似的问题,但是我仍然无法解决这个问题,如果这可能是重复的,那么很抱歉 无论如何,代码如下: $email = $_POST['emailAddress']; $username = $_POST['userName']; $dob = $_POST['dobYear'] . "-" . $_POST['dobMonth'] . "-" . $_POST['dobDay']; $fname = $_POST['firstName']; $sname = $_POST['lastName'

我看到过类似的问题,但是我仍然无法解决这个问题,如果这可能是重复的,那么很抱歉

无论如何,代码如下:

$email = $_POST['emailAddress'];
$username = $_POST['userName'];
$dob = $_POST['dobYear'] . "-" . $_POST['dobMonth'] . "-" . $_POST['dobDay'];
$fname = $_POST['firstName'];
$sname = $_POST['lastName'];
$country = $_POST['country'];
$squestion = $_POST['secretQuestion'];
$sanswer = $_POST['secretAnswer'];


require('db_connect.php');
$insert_stmt = $mysqli->prepare("INSERT INTO users (username, email, password, salt, fname, sname, country, dob, squestion, sanswer) VALUES (:username, :email, :password, :salt, :fname, :sname, :country, :dob, :squestion, :sanswer)");
var_dump($mysqli->error);
$insert_stmt->bind_param(':username', $username); // error is here 
$insert_stmt->bind_param(':email', $email);
$insert_stmt->bind_param(':password', $password);
$insert_stmt->bind_param(':salt', $random_salt);
$insert_stmt->bind_param(':fname', $fname);
$insert_stmt->bind_param(':sname', $sname);
$insert_stmt->bind_param(':country', $country);
$insert_stmt->bind_param(':dob', $dob);
$insert_stmt->bind_param(':squestion', $squestion);     
$insert_stmt->bind_param(':sanswer', $sanswer);     
$insert_stmt->execute();
这是var_dump的输出:

您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行使用的正确语法:username、:email、:password、:salt、:fname、:sname、:country、:dob、:squestion“

我知道在准备线上肯定有问题,但我真的没有看到

下面是db_connect.php,以防有人想查看,但该文件工作正常:

define("HOST", "localhost"); // The host you want to connect to.
define("USER", "sec_user"); // The database username.
define("PASSWORD", "eKcGZr59zAa2BEWU"); // The database password. 
define("DATABASE", "secure_login"); // The database name.

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
同样,如果这是重复的,或者如果我遗漏了一些明显的信息,请道歉。

该类不支持命名的SQL参数。此外,第一个参数不是SQL参数的名称(因为该类不支持命名的SQL参数)


相应地更改绑定

这就是为什么在使用不熟悉的API之前阅读文档是一个好主意。PHP文档通常也包含示例。那么解决方法是什么呢?我遇到了这个确切的问题…我正在使用?,?,?values@jflay修复方法是使
$mysqli->prepare()
工作。在上面的问题中,
$mysqli->prepare()
失败是因为假设MySQLi理解命名参数。在您的情况下,失败的原因不同。请使用类的属性获取有关原因的更多信息。耶,我找到它是因为阅读了这些类名…需要与O-O方法保持一致并使用bind_param()而不是bindParams或其他php.net方法。谢谢。
$insert_stmt = $mysqli->prepare("INSERT INTO users (username, email, password, salt, fname, sname, country, dob, squestion, sanswer) VALUES (?, ?,?, ?, ?, ?, ?, ?, ?, ?)");