繁体   English   中英

使用一个? 在PHP MySQLi准备的INSERT语句中包含几个变量

[英]Using one ? to contain several variables in PHP MySQLi prepared INSERT statement

试图掌握INSERT查询的准备好的语句。 应该将新用户添加到数据库中:

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

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

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM