好的,我对绑定很陌生,这里有一些有效的代码。我从教程中学习了这种格式,但我想有更有效的方法可以做到这一点。在我的示例中,有 4 个名称,但实际上我将在我正在处理的项目中进行大量插入和更新,该项目将有 20 个左右的字段。我喜欢这种方法的清晰性,但很明显,当您谈论 20 个或更多字段时,它确实需要大量的空间。让我们先看看我的代码。
以下是它使用的功能:
// prepare the statement
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
public function bind($param, $value, $type = null){
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
// run the binding process
$this->stmt->bindValue($param, $value, $type);
}
// execute the prepared statement
public function execute(){
return $this->stmt->execute();
}
现在是实际的代码
$database->query("
INSERT INTO users(
user_name,
user_password_hash,
user_email,
user_activation_hash
)
VALUES(
:user_name,
:user_password_hash,
:user_email,
:user_activation_hash
)
");
// bind the values
$database->bind(":user_name", "$this->user_name");
$database->bind(":user_password_hash", "$this->user_password_hash");
$database->bind(":user_email", "$this->user_email");
$database->bind(":user_activation_hash", "$this->user_activation_hash");
// execute the statement and insert the values into the database
$database->execute();
它只是呼唤一个循环,特别是因为我有一个习惯叫帖子字段,输入字段,变量和占位符同名,不确定这是好事还是坏事,但我发现它在处理时对我很有帮助我会的大表格。
无论如何,我可以做这样的事情:
$placeholder_array = array(
"user_name" => "\$this->user_name",
"user_password_hash" => "\$this->user_password_hash",
"user_email" => "\$this->user_email",
"user_activation_hash" => "\$this->user_activation_hash"
);
// well use this copy to edit the array keys and keep original for the binding
$placeholder_copy = $placeholder_array;
// turn the array into a string i.e user_name, user_password_hash....
$fields = implode (", ", array_keys($placeholder_array));
// foreach to add : placeholder prefix for binding
foreach ($placeholder_copy as $key => $value){
$placeholder_copy [':'.$key] = $value;
unset($placeholder_copy[$key]);
}
// turn the copy array which has prefix :user_name into a string
$placeholders = implode (", ", array_keys($placeholder_copy));
$database->query("
INSERT INTO users($fields)
VALUES($placeholders)
");
// bind the values
foreach ($placeholder_copy as $bind_values => $value){
echo '$database->bind("'.$bind_values.'", "'.$value.'");' . "<br />";
}
// execute the statement and insert the values into the database
$database->execute();
然后我可以把它变成一个带有参数的函数,用于传递关联数组和表名,以使我的主代码更简洁。
现在想象一下,我将做任何数量的这些,因为我正在从事的项目涉及大量向用户提交数据的大型表单。我是 PDO 的新手并试图掌握它,因此可能有一种更简单的方式来构建这些类型的查询,我查看了 google 和 stackflow,但我并没有真正了解他们在做什么,所以我认为自己做一个会允许人们可以更好地向我解释发生了什么,我宁愿在我的项目开始时正确地解决这个问题,也不愿回头再改变一切。那么有没有更好的方法或者这个可以吗?
非常感谢任何反馈,我很高兴现在我在这里接受了人们的建议并转向 PDO。