statements - php pdo tutorial deutsch




Binden mehrerer Werte in PDO (2)

Gibt es eine einfache Möglichkeit, mehrere Werte in PDO ohne Wiederholung zu binden? Sehen Sie sich den folgenden Code an:

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

Hier habe ich die Werte wiederholt, also 4 mal. Gibt es eine einfache Möglichkeit, mehrere Werte in PDO zu binden?


Sie können Werte immer innerhalb der Argumente von execute() binden, solange Sie mit den Werten PDO::PARAM_STR können, die als PDO::PARAM_STR (string) behandelt werden.

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

Sie können das übergebene Array wie jedes Array verwenden:

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

Um wirklich nie zweimal etwas einzugeben, können Sie ein Array verwenden, um die Daten zu liefern, und eine Funktion für dasselbe Array verwenden, um den Bindungsteil der MySQL-Abfrage auszugeben. Beispielsweise:

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

Die Daten- und Spaltennamen stammen aus einem einzelnen assoziativen Array ( $data ). Verwenden Sie anschließend bindFields($data) , um eine Zeichenfolge aus column = :column Paaren zu generieren, die in die MySQL-Abfrage verkettet werden:

$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) Ausgabe:

 a_column_name=:a_column_name,another_column_name=:another_column_name 






bind