PHP - Php Pdo Transactions
Hello all.
I have never used transactions before and I'm building a website right now and trying to use one. Now, the question here is do I use it right? I have 3 tables, posts, users and users_to_posts which holds all ids (id, user_id, post_id). Now as I need to get the last insert id from database, I need to lock tables cause when two people post at the same time, it might get all mixed up. Now I use the lock tables statement first time. Anyway, all this story aside, the question. Do I use this block right? if(isset($_SESSION['uID'], $_SESSION['username'])) { // User try { $dbh->beginTransaction(); $stmt = $dbh->exec('LOCK TABLES `posts` WRITE, `users_to_posts` WRITE'); $insert = $dbh->prepare('INSERT INTO `posts` (`content`) VALUES (:content)'); $insert->bindParam(':content', $post, PDO::PARAM_STR, 350); $insert->execute(); $jointbl = $dbh->prepare('INSERT INTO `users_to_posts` (`user_id`, `post_id`) VALUES (:uID, :pID)'); $jointbl->bindParam(':uID', $_SESSION['uID'], PDO::PARAM_INT, 11); $jointbl->bindParam(':pID', $dbh->lastInsertId(), PDO::PARAM_INT, 11); $jointbl->execute(); $unlock = $dbh->exec('UNLOCK TABLES'); $dbh->commit(); } catch(PDOException $e) { echo $e->getMessage(); } } Oh, just in case. There are no errors, it works. I just want to know if it's the right way to use it. Similar Tutorialsmust we always use Transactions in php-mysql applications? i kind of made a self-discovery for a problem i was trying to solve....and found that mysql transactions would solve my problem. i wanted a set of SQLs to all be executed, or none an with undo of partial successful updates. is this transactions the standard way, and is this a must-do for realtime applications? any pros/cons/advise? thanks! Hi all, I have some financial transactions to perform in my system like cash deposits, withdrawals etc.I have built my system using PHP and MySQL. Can someone explain me how can i use rollback operations if something failure occurs? Heshan, How do you guys keep bookkeeping records of transactions?
An example is you pay for a domain name, monthly hosting or anything that you receive an email receipt for and a receipt is stored on the vendors website. Say up to 7 years.
Hello, I would like show entries on a list based on their PayPal status. If it is "pending" I don't want them to show on the list. only if their status is "complete". I just recently switched over to WPForms for WordPress. They offer only a basic PHP file that creates a list but they do not support any modifications to that file. What would I need to do to this code to produce the results I need? Please see attached files and code pasted below. Thanks for your help, Steve
<?php
$data = preg_replace("/[^a-zA-Z' ']/", "", $data); } break;
}
Hi, I'm trying to insert data into two different tables using, but am getting an error I can't figure out. If I move the $mysqli->commit(); into the foreach loop, I get at least one returned row before the rest fail. The error current error message is Array ( [0] => Error: Couldn't insert into english! ). Any idea what is causing this?
<?php $file_array = file('../grammar/conjunctions.txt'); $csv = array_map('str_getcsv', $file_array); // DB $mysqli = new mysqli('localhost', 'root', '******', 'angos'); $mysqli->autocommit(false); $error = array(); foreach($csv as $value) { $angos_query = $mysqli->query("INSERT INTO angos (angos, grammar) VALUES ('$value[0]', 'con')"); $id = $mysqli->insert_id; // grab the currant angos table id if($angos_query == false) { array_push($error, "Error: Couldn't insert into angos!"); } $english_query = $mysqli->query("INSERT INTO english (angos_id, english) VALUES ('$id', '$value[1]')"); if($english_query == false) { array_push($error, "Error: Couldn't insert into english!"); } if(!empty($error)) { $mysqli->rollback(); } } $mysqli->commit(); print_r($error); // print_r($csv); ?>More info SQL: CREATE TABLE angos ( id int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, angos varchar(255) not null, grammar varchar(3) not null, updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT unique_input UNIQUE (angos) ) engine=InnoDB; CREATE TABLE english ( id int unsigned not null primary key, angos_id int unsigned, english varchar(255), grammar_note varchar(500), CONSTRAINT fk_angos_source FOREIGN KEY (angos_id) REFERENCES angos(id) ON DELETE CASCADE ON UPDATE CASCADE ) engine=InnoDB; |