Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备语句的PDO多参数绑定_Php_Mysql_Pdo - Fatal编程技术网

Php 准备语句的PDO多参数绑定

Php 准备语句的PDO多参数绑定,php,mysql,pdo,Php,Mysql,Pdo,我在PDO中准备了一个包含多个参数的语句,是否有方法在组中绑定参数,或链接调用,以避免为每个项目冗长地调用bindParam 它现在看起来是什么样子(我在别处有更多的参数化查询): 在执行时执行吗 $stmt->execute(array(':name' => $name, etc....)) 只有在循环中执行语句并更改$name中的值和循环中的其他变量时,使用形式化的bindParam()才有意义。如果是一个fire/forget单次执行查询,最好只传递execute()调用中的

我在PDO中准备了一个包含多个参数的语句,是否有方法在组中绑定参数,或链接调用,以避免为每个项目冗长地调用
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变量之间没有永久链接。