在pdo中绑定多个值


Binding multiple values in pdo

有没有一种简单的方法可以在PDO中绑定多个值而无需重复?看看下面的代码:

$result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)");
$result_set->bindValue(':username', '~user');
$result_set->bindValue(':password', '~pass');
$result_set->bindValue(':first_name', '~John');
$result_set->bindValue(':last_name', '~Doe');
$result_set->execute();

在这里,我以一种重复的方式绑定值,即4次。那么,有没有一种简单的方法可以在PDO中绑定多个值呢?

您可以始终在execute()的参数中绑定值,只要您对被视为PDO::PARAM_STR(字符串)的值满意即可。

$result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)");
$result_set->execute(array(
    ':username' => '~user',
    ':password' => '~pass',
    ':first_name' => '~John',
    ':last_name' => '~Doe'
));

您可以像使用任何数组一样使用传递的数组:

$user = "Nile";
$pdo->execute(array(":user" => $user));

如果你想根据类型(string、int等)进行绑定,那就不。如果你能把所有东西都绑定成字符串:

$stmt = $db->prepare("...");
$stmt->execute(array(
    'foo' => 'bar',
    'something' => 'else',
    'third' => 'thing',
));

要真正做到从不两次键入任何内容,可以使用数组来提供数据,并在同一数组上使用函数来输出MySQL查询的绑定部分。例如:

function bindFields($fields){
    end($fields); $lastField = key($fields);
    $bindString = ' ';
    foreach($fields as $field => $data){ 
        $bindString .= $field . '=:' . $field; 
        $bindString .= ($field === $lastField ? ' ' : ',');
    }
    return $bindString;
}

数据和列名来自单个关联数组($data)。然后,使用bindFields($data)生成一个column = :column对的字符串,连接到MySQL查询中:

$data = array(
    'a_column_name' => 'column data string',
    'another_column_name' => 'another column data string'
);
$query = "INSERT INTO tablename SET" . bindFields($data);
$result = $PDO->prepare($query);
$result->execute($data);

bindFields($data)输出:

 a_column_name=:a_column_name,another_column_name=:another_column_name