Le operazioni classiche in un codice di ciclo:PHP istruzioni preparate e transazioni in un ciclo
$mysqli->query("START TRANSACTION");
foreach ($pdata as $key => $value) {
$sql = "INSERT INTO temp (`fund_id`) VALUES (" . $value . ")";
$result = $mysqli->query($sql);
}
$mysqli->query("COMMIT");
Poi cambiare per istruzioni preparate:
$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();
Domande:
1) sono questi due codici identici? Mi manca qualcosa nel secondo codice con dichiarazioni preparate?
2) È $mysqli->commit()
uguale a $mysqli->query("COMMIT")
?
3) Devo aggiungere $mysqli->query("START TRANSACTION");
per il blocco di istruzioni preparato o la transazione verrà avviata automaticamente quando impostiamo autocommit(FALSE)
?
Non è necessario "START TRANSACTION" dopo aver disattivato l'autocommit. Potresti '$ mysqli-> prepare()' _before_ il tuo ciclo, quindi eseguirlo() all'interno del ciclo 'foreach'. Non è necessario 'prepare()' su ogni iterazione del ciclo. –
Non è necessario 'bind_param()' ogni volta, neanche. Lega un riferimento alla variabile, quindi ogni volta che lo eseguirai userà il valore corrente della variabile. – Barmar