0

试图掌握 INSERT 查询的准备好的语句。这应该向数据库添加一个新用户:

$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?)");
$statement->bind_param('s', "'$email','$passwordhash'");
$statement->execute();

使用 single 是否正确?并以这种方式填充两个值?

4

3 回答 3

2

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 将变成一场噩梦。

于 2013-02-21T17:36:09.800 回答
1

应该是这样的。

$statement = $mysqli->prepare("INSERT INTO users (email,passwordhash) VALUES (?,?)");
$statement->bind_param('ss', $email,$passwordhash);
$statement->execute();
于 2013-02-21T17:28:32.130 回答
1

在准备好的语句中,每个?用于替换一个值。

执行时,您的查询将是:

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();
于 2013-02-21T17:36:48.880 回答