我在PDO中有一个带有多个参数的预备语句,有没有办法绑定组中的参数,或者链接调用以避免为每个项目单调调用bindParam
?
现在看起来像什么(我在其他地方有更多的参数化查询):
$stmt = $pdo->prepare("INSERT INTO users (name, pass, mail, created, timezone_name, hash_pass, salt) VALUES (:name, :pass, :mail, :created, :timezone, :hashed, :salt") ;
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':pass', $pass, PDO::PARAM_STR);
$stmt->bindParam(':mail', $mail, PDO::PARAM_STR);
$stmt->bindParam(':created', $date, PDO::PARAM_INT);
$stmt->bindParam(':timezone', $timezone, PDO::PARAM_STR);
$stmt->bindParam(':hashed', $hash, PDO::PARAM_STR);
$stmt->bindParam(':salt', $salt, PDO::PARAM_STR);
$stmt->execute();
答案 0 :(得分:3)
在执行时执行此操作吗?
$stmt->execute(array(':name' => $name, etc....))
使用形式bindParam()
实际上只有在您将要在循环中执行语句并且将更改$name
中的值以及循环中的其他变量时才有意义。如果它是一个火灾/忘记单执行查询,也可以只传递execute()
调用中的值并跳过正式绑定 - 这是很多额外的工作,基本上没有任何好处。
答案 1 :(得分:1)
是的还有另一种选择:
$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的例子。
选择适合你的人。
旁注:您永远不能混合位置和命名参数。
答案 2 :(得分:0)
你可以这样做:
$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
]);