The classic transactions in a loop 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");
Then we change to prepared statements:
$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) Are these two codes identical? Am I missing something in the second code with prepared statements?
2) Is $mysqli->commit()
the same as $mysqli->query("COMMIT")
?
3) Do I need to add $mysqli->query("START TRANSACTION");
for the prepared statements block or the transaction will automatically start when we set autocommit(FALSE)
?
Then, have a look at the bind_param() function: $stmt->bind_param("sss", $firstname, $lastname, $email); This function binds the parameters to the SQL query and tells the database what the parameters are. The "sss" argument lists the types of data that the parameters are.
Return Value: Returns an array of strings that corresponds to the fetched row. NULL if there are no more rows in result set. PHP Version: 5+
Definition and Usage The prepare() / mysqli_prepare() function is used to prepare an SQL statement for execution.
Parameterized queries solve SQL Injection vulnerabilities. This example uses PDO to fix the vulnerability but you can still use mysqli functions to prevent SQL Injection.
Your loop can be optimized by pulling the prepare
and bind_param
statements out of the loop.
$value = null;
$mysqli->autocommit(FALSE);
$sql = "INSERT INTO temp (`fund_id`) VALUES (?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('i', $value);
foreach ($pdata as $value) {
$stmt->execute();
}
$mysqli->commit();
You have turned off autocommit with your autocommit(FALSE)
line and therefore don't need to use the START TRANSACTION
statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With