PHP préparé les instructions et les transactions dans une boucle

Les opérations classiques dans une boucle de code:

$mysqli->query("START TRANSACTION");
foreach ($pdata as $key => $value) {
    $sql    = "INSERT INTO temp (`fund_id`) VALUES (" . $value . ")";
    $result = $mysqli->query($sql);
}
$mysqli->query("COMMIT");

Puis nous changeons de déclarations préparées à l'avance:

$mysqli->autocommit(FALSE);
foreach ($pdata as $key => $value) {
    $sql  = "INSERT INTO temp (`fund_id`) VALUES (?)";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('i', $value);
    $stmt->execute();
}
$mysqli->commit();

Questions:

1) ce Sont ces deux codes identiques? Ai-je raté quelque chose dans le deuxième code, avec les requêtes préparées?

2) Est $mysqli->commit() le même que $mysqli->query("COMMIT")?

3) ai-je besoin d'ajouter $mysqli->query("START TRANSACTION"); pour la préparation du bloc d'instructions ou de l'opération démarrera automatiquement lorsque nous avons mis en autocommit(FALSE)?

  • Vous n'avez pas besoin de START TRANSACTION après que vous avez activé la validation automatique off. Vous pouvez $mysqli->prepare() avant votre boucle, puis execute() à l'intérieur de la foreach boucle. Il n'y a pas besoin de prepare() à chaque itération de boucle.
  • Vous n'avez pas besoin de bind_param() chaque fois, que ce soit. Il se lie d'une référence à la variable, de sorte que chaque fois que vous exécuter, il va utiliser la variable de la valeur actuelle.
InformationsquelleAutor user2723490 | 2013-10-01