Php 准备语句的PDO多参数绑定
我在PDO中准备了一个包含多个参数的语句,是否有方法在组中绑定参数,或链接调用,以避免为每个项目冗长地调用Php 准备语句的PDO多参数绑定,php,mysql,pdo,Php,Mysql,Pdo,我在PDO中准备了一个包含多个参数的语句,是否有方法在组中绑定参数,或链接调用,以避免为每个项目冗长地调用bindParam 它现在看起来是什么样子(我在别处有更多的参数化查询): 在执行时执行吗 $stmt->execute(array(':name' => $name, etc....)) 只有在循环中执行语句并更改$name中的值和循环中的其他变量时,使用形式化的bindParam()才有意义。如果是一个fire/forget单次执行查询,最好只传递execute()调用中的
bindParam
它现在看起来是什么样子(我在别处有更多的参数化查询):
在执行时执行吗
$stmt->execute(array(':name' => $name, etc....))
只有在循环中执行语句并更改$name
中的值和循环中的其他变量时,使用形式化的bindParam()
才有意义。如果是一个fire/forget单次执行查询,最好只传递execute()
调用中的值并跳过正式绑定-这是一个基本上没有好处的大量额外工作。在执行时执行吗
$stmt->execute(array(':name' => $name, etc....))
只有在循环中执行语句并更改
$name
中的值和循环中的其他变量时,使用形式化的bindParam()
才有意义。如果是一个fire/forget single execution查询,最好只传递execute()
调用中的值并跳过正式绑定-这是一个基本上没有好处的大量额外工作。是的,有一个替代方法:
$stmt = $pdo->prepare("INSERT INTO users (name, pass, mail, created, timezone_name, hash_pass, salt) VALUES (?, ?, ?, ?, ?, ?, ?)") ;
$values = [$name, $pass, $mail, $date, $timezone, $hash, $salt];
$stmt->execute($values);
你有位置参数,我给你看的那个,你有命名参数,Marc B的例子
选择适合你的
旁注:您永远不能混合使用位置参数和命名参数。是的,有一种替代方法:
$stmt = $pdo->prepare("INSERT INTO users (name, pass, mail, created, timezone_name, hash_pass, salt) VALUES (?, ?, ?, ?, ?, ?, ?)") ;
$values = [$name, $pass, $mail, $date, $timezone, $hash, $salt];
$stmt->execute($values);
你有位置参数,我给你看的那个,你有命名参数,Marc B的例子
选择适合你的
旁注:您永远不能混合使用位置参数和命名参数。您可以这样做:
$stmt = $pdo->prepare("INSERT INTO users (name, pass, mail, created, timezone_name, hash_pass, salt) VALUES (:name, :pass, :mail, :created, :timezone, :hashed, :salt");
$stmt->execute([
':name' => $name,
':pass' => $pass,
':mail' => $mail,
':created' => $created,
':timezone' => $timezone,
':hashed' => $hashed,
':salt' => $salt
]);
您可以这样做:
$stmt = $pdo->prepare("INSERT INTO users (name, pass, mail, created, timezone_name, hash_pass, salt) VALUES (:name, :pass, :mail, :created, :timezone, :hashed, :salt");
$stmt->execute([
':name' => $name,
':pass' => $pass,
':mail' => $mail,
':created' => $created,
':timezone' => $timezone,
':hashed' => $hashed,
':salt' => $salt
]);
@SergeyBelyakov参数不尽相同type@blackbird57嗯,你能不能建立一个多维数组,它包含每一个需要修改的项目的参数、键和值binded@blackbird57比如
[$name':name','PDO::PARAM_STR']
@SergeyBelyakov参数不尽相同type@blackbird57嗯,你能不能建立一个多维数组,它包含每一个需要修改的项目的参数、键和值binded@blackbird57比如[$name':name','PDO::PARAM_STR']
您应该阅读,您的元素需要用逗号分隔-但不是我的否决票。这如何绑定参数?@blackbird57我现在修复了引号和逗号。@Qirel谢谢,它现在已修复。您应该阅读,并且您的元素需要用逗号分隔-而不是我的下一票。这如何绑定参数?@blackbird57我现在已修复引号和逗号。@Qirel谢谢,它现在已修复。但这会隐式绑定它们吗?我想做的是让PDO正确地转义它们以防止注入除了调用execute()
的持续时间之外,根本没有绑定。最终结果与绑定这些值的结果相同。您仍然可以得到注入防御等等,只是占位符和php变量之间没有永久链接。但是这会隐式地绑定它们吗?我想做的是让PDO正确地转义它们以防止注入除了调用execute()
的持续时间之外,根本没有绑定。最终结果与绑定这些值的结果相同。您仍然可以获得注入防御等等,只是占位符和php变量之间没有永久链接。