结合在PDO多个值(Binding multiple values in pdo)

2019-06-18 02:01发布

是否有没有repitition在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次repepeated方式绑定值。 那么,还有的在PDO绑定多个值的简单的方法?

Answer 1:

你总是可以的参数中的绑定值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));


Answer 2:

如果您想根据类型(字符串,整数等)进行绑定,则没有。 如果你是罚款结合一切作为一个字符串:

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


Answer 3:

要真正从未键入任何两次,你可以使用数组来提供数据,并使用功能相同的阵列上输出的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 


文章来源: Binding multiple values in pdo
标签: php pdo bind