简体   繁体   English

在 pdo 中绑定多个值

[英]Binding multiple values in pdo

Is there's an easy way of binding multiple values in PDO without repitition ?是否有一种简单的方法可以在不重复的情况下在 PDO 中绑定多个值? Take a look at the following code :看看下面的代码:

$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();

Here, I binded values in a repepeated way which is 4 times.在这里,我以 4 次重复的方式绑定值。 So is there's an easy way of binding multiple values in PDO ?那么是否有一种简单的方法可以在 PDO 中绑定多个值?

You can always bind values within the arguments of execute() as long as you're fine with the values being treated as PDO::PARAM_STR (string).您始终可以在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'
));

You can use the array passed just like any array:您可以像使用任何数组一样使用传递的数组:

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

If you want to bind based on type (string, int, etc), then no.如果您想根据类型(字符串、整数等)进行绑定,则不可以。 If you're fine with binding everything as a string:如果您可以将所有内容绑定为字符串:

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

To truly never type anything twice, you can use an array to supply the data, and use a function on that same array to output the binding portion of the MySQL query.要真正永远不要两次输入任何内容,您可以使用一个数组来提供数据,并在同一个数组上使用一个函数来输出 MySQL 查询的绑定部分。 For example:例如:

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

The data and column names come from a single associative array ( $data ).数据和列名来自单个关联数组 ( $data )。 Then, use bindFields($data) to generate a string of column = :column pairs to concatenate into the MySQL query:然后,使用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) output: bindFields($data)输出:

 a_column_name=:a_column_name,another_column_name=:another_column_name 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM