准备语句

时间:2016-02-10 15:20:35

标签: php mysql pdo

我在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();

3 个答案:

答案 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
]);