php PDO insertion par lots de plusieurs lignes avec des espaces réservés

Je suis à la recherche de faire plusieurs insertions à l'aide de PHP PDO.

Le plus proche de la réponse que j'ai trouvé est celui-ci

comment insérer un tableau-en-un-seul-mysql-préparé-déclaration

Cependant l'exemple des thats été donné utilise ?? au lieu de vrais espaces réservés.

J'ai regardé les exemples sur la doc PHP site pour les détenteurs de place

php.net l'aop.prêt-états

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

Maintenant, disons que je voulais atteindre les ci-dessus, mais avec un tableau

$valuesToInsert = array(
  0 => array('name' => 'Robert', 'value' => 'some value'),
  1 => array('name' -> 'Louise', 'value' => 'another value')
);

Comment m'y prendre avec PDO et plusieurs inserts par transaction?

J'imagine qu'il en serait de commencer avec une boucle?

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");

foreach($valuesToInsert as $insertRow){

    //now loop through each inner array to match binded values
    foreach($insertRow as $column => value){
        $stmt->bindParam(":{$column}", value);
    }
}
$stmt->execute();

Cependant, le ci-dessus ne fonctionne pas, mais j'espère qu'il va démontrer ce que im essayant d'atteindre

  • vous avez besoin d'exécuter à l'intérieur de la boucle. sinon, vous êtes juste d'écraser le paramètre de limite et à la fin de la liaison uniquement la DERNIÈRE valeur.
  • cependant, si j'exécute alors qui va faire la DB transaction une ligne à la fois? Im essayant de le faire dans le lot
  • oui, mais si vous êtes en essayant d'imiter le mysql étendu insert ... values (...), (...), (...) insérer syntaxe, ce n'est pas la façon dont vous aller à ce sujet. vous devez pré-construire une instruction de requête qui a un espace réservé pour chaque ensemble de valeurs de l'insertion, de la préparer, lier des paramètres, puis sur exécuter. vous auriez du faire autant de travail que l'exécution d'une seule préparé insérer plusieurs fois.
  • Je suis de l'insertion de quelques 40 ou 50 lignes à la fois. J'ai besoin de le faire dans le lot. Son la DB opération qui prend du temps.
  • Puis enveloppez le tout en une seule opération à l'aide de la fonction PDO::beginTransaction() / PDO::commit() et d'exécuter des requêtes comme mentionné par @MarcB.
  • JFYI: ?? sont réel des espaces et des :name sont des faux.
  • comment dois-je faire PDO::beginTransaction() / PDO::commit()

InformationsquelleAutor Robbo_UK | 2013-02-25