簡體   English   中英

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

如果您想根據類型(字符串、整數等)進行綁定,則不可以。 如果您可以將所有內容綁定為字符串:

$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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM