Php 如何在pdo中计算和自动创建bindParams?
我正在尝试创建一个函数,以便在函数中自动创建bindParams 在这里 注意:我知道如何将函数用于执行,我正在尝试在其中使用绑定 下面是我正在尝试的函数,该函数调用另一个计算并创建bindParams的函数:Php 如何在pdo中计算和自动创建bindParams?,php,function,pdo,Php,Function,Pdo,我正在尝试创建一个函数,以便在函数中自动创建bindParams 在这里 注意:我知道如何将函数用于执行,我正在尝试在其中使用绑定 下面是我正在尝试的函数,该函数调用另一个计算并创建bindParams的函数: function insert($sql, $param_types, $args) { $stmt= $this->pdo->prepare($sql); $this->CreateParams($sql, $param_types, $args);
function insert($sql, $param_types, $args) {
$stmt= $this->pdo->prepare($sql);
$this->CreateParams($sql, $param_types, $args);
$stmt->execute();
}
下面是第二个函数,它将计算和绑定值:
function CreateParams($sql, $param_types $args) {
$param_references[] = & $param_types;
for($i=0; $i<count($args); $i++) {
$param_references[] = & $args[$i];
}
call_user_func_array(array(
$sql,
'bindParam'
), $param_references);
}
我尝试使用func_get_args()参数中的代码>但完全混淆:(
谢谢您的功能可以简化为:
function insert($sql, $param_types, $args) {
$stmt= $this->pdo->prepare($sql);
$stmt->execute($args);
}
Asexecute
可以使用值数组作为参数。这些值将在查询中使用
在这种情况下,$param_types
参数是无用的
更新:仍然不清楚您期望的是什么,但要开始的代码是:
function insert($sql, $param_types, $args) {
$stmt= $this->pdo->prepare($sql);
$this->CreateParams($stmt, $param_types, $args);
$stmt->execute();
}
function CreateParams($stmt, $param_types, $args) {
$i = 0;
foreach ($args as $argument) {
$stmt->bindValue($i + 1, $argument, $param_types[$i]);
$i++;
}
}
// Calling as:
insert(
'INSERT INTO Auth_tokens (username, password_hash, selector_hash, expiry_date) values (?, ?, ?, ?)',
[\PDO::PARAM_STR, \PDO::PARAM_STR, \PDO::PARAM_STR, \PDO::PARAM_STR],
[$username, $random_password_hash, $random_selector_hash, $expiry_date]
);
您的功能可以简化为:
function insert($sql, $param_types, $args) {
$stmt= $this->pdo->prepare($sql);
$stmt->execute($args);
}
Asexecute
可以使用值数组作为参数。这些值将在查询中使用
在这种情况下,$param_types
参数是无用的
更新:仍然不清楚您期望的是什么,但要开始的代码是:
function insert($sql, $param_types, $args) {
$stmt= $this->pdo->prepare($sql);
$this->CreateParams($stmt, $param_types, $args);
$stmt->execute();
}
function CreateParams($stmt, $param_types, $args) {
$i = 0;
foreach ($args as $argument) {
$stmt->bindValue($i + 1, $argument, $param_types[$i]);
$i++;
}
}
// Calling as:
insert(
'INSERT INTO Auth_tokens (username, password_hash, selector_hash, expiry_date) values (?, ?, ?, ?)',
[\PDO::PARAM_STR, \PDO::PARAM_STR, \PDO::PARAM_STR, \PDO::PARAM_STR],
[$username, $random_password_hash, $random_selector_hash, $expiry_date]
);
当您可以使用simpleexecute($args)
时,使代码复杂化有什么意义呢?PDO将从$args
中传递的值中提取数据类型。您在这一点上是错的。PDO永远不会猜出数据类型,因为它可能是危险的。相反,它会将所有参数绑定为字符串。@Dilek nope,不是“安全得多”。这样的语句是没有根据的。将所有值绑定为字符串与任何其他方法一样安全。@Dilek我肯定只保留execute($args)
,而不保留任何CreateParams()
这是无用的、繁琐的,并且会无缘无故地使代码膨胀。当您可以使用simpleexecute($args)时,使代码复杂化有什么意义
?PDO将从传入的值中提取数据类型。$args
您在这个问题上是错的。PDO永远不会猜测数据类型,因为它可能是危险的。相反,它会将所有参数绑定为字符串。@Dilek nope,不是“更安全”。这样的语句是没有根据的。将所有值绑定为字符串与任何其他方法一样安全。@Dilek我肯定只保留execute($args)
,而不保留任何CreateParams()
,这是无用的、繁琐的,而且会无缘无故地使代码膨胀。