2013-02-21 106 views
0

试图掌握INSERT查询的预处理语句。这应该是为数据库添加新用户:使用一个?在PHP中包含多个变量MySQLi编写INSERT语句

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

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

回答

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短又将会做更多的工作 - 错误处理,剖析了d这样。

另外请记住,当你将有不同数量的字段插入时,mysqli将变成一场噩梦。

1

应该是这样。

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

嗯知道了,谢谢 – xiuyuan 2013-02-21 17:29:05

+0

你不是说:'$陈述书> bind_param( 'SS',$电子邮件,$ passwordhash);'? – 2013-02-21 17:34:17

+0

是的,我刚刚发现,改变了我的结局。 – xiuyuan 2013-02-21 17:36:06

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(); 
相关问题