试图掌握 INSERT 查询的准备好的语句。这应该向数据库添加一个新用户:
$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?)");
$statement->bind_param('s', "'$email','$passwordhash'");
$statement->execute();
使用 single 是否正确?并以这种方式填充两个值?
mysqli 这样做的方式需要分别绑定所有变量
$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?,?)");
$statement->bind_param('ss', $email,$passwordhash);
$statement->execute();
但是,如果您希望按照自己的方式进行操作(例如,您已经准备好一个数组并希望使用一个占位符插入它),您需要一个帮助器类,它将自定义占位符转换为正确的 SQL 语句:
$data = array('email'=>$email, 'passwordhash'=>$passwordhash);
$db->query("INSERT INTO users SET ?u");
它会比原始的 mysqli 更短,但会做更多的事情——错误处理、分析等。
还要记住,当您要插入可变数量的字段时,mysqli 将变成一场噩梦。
应该是这样的。
$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?,?)");
$statement->bind_param('ss', $email,$passwordhash);
$statement->execute();
在准备好的语句中,每个?
用于替换一个值。
执行时,您的查询将是:
INSERT INTO users (email,passwordhash) VALUES ("'email','password'")
那不是你想要的。您需要使用 2 个 ?s,每个值一个。
$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?,?)");
// Pass each variable as a separate parameter
$statement->bind_param('ss', $email, $passwordhash);
$statement->execute();