I am trying to insert data to two tables using the id for the first table. I have tried several possibilities but none seem to work. Please see below for the current method I am using. It is inserting to the first table but not the second. Plus there isn't any error telling me what I did wrong.
If anyone can tell me where I am going wrong that would be great.
public function addContact($cnt_fname,$cnt_lname,$cnt_email,$cnt_phone,$cnt_type,$cnt_company,$cnt_web,$cnt_add1,$cnt_add2,$cnt_city,$cnt_state,$cnt_post,$cnt_country,$cnt_status) {
try
{
$stmt = $this->conn->prepare("
START TRANSACTION;
INSERT INTO LeadContact(lead_fname,lead_lname,lead_email,lead_phone,lead_type,lead_company,lead_add1,lead_add2,lead_city,lead_state,lead_post,lead_country,lead_status)
VALUES(:cnt_fname,:cnt_lname,:cnt_email,:cnt_phone,:cnt_type,:cnt_company,:cnt_add1,:cnt_add2,:cnt_city,:cnt_state,:cnt_post,:cnt_country,:cnt_status);
INSERT INTO LeadCompany(company_phone,company_type,company_name,company_website,company_add1,company_add2,company_city,company_state,company_post,company_country,company_status,company_contact)
VALUES(:cnt_phone,cnt_type,:cnt_company,:cnt_web,:cnt_add1,:cnt_add2,:cnt_city,:cnt_state,:cnt_post,:cnt_country,:cnt_status,last_insert_id());
COMMIT;
");
$stmt->bindparam(":cnt_fname", $cnt_fname);
$stmt->bindparam(":cnt_lname", $cnt_lname);
$stmt->bindparam(":cnt_email", $cnt_email);
$stmt->bindparam(":cnt_phone", $cnt_phone);
$stmt->bindparam(":cnt_type", $cnt_type);
$stmt->bindparam(":cnt_company", $cnt_company);
$stmt->bindparam(":cnt_add1", $cnt_add1);
$stmt->bindparam(":cnt_add2", $cnt_add2);
$stmt->bindparam(":cnt_city", $cnt_city);
$stmt->bindparam(":cnt_state", $cnt_state);
$stmt->bindparam(":cnt_post", $cnt_post);
$stmt->bindparam(":cnt_country", $cnt_country);
$stmt->bindparam(":cnt_status", $cnt_status);
$stmt->bindparam(":cnt_web", $cnt_web);
$stmt->execute();
return $stmt;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
The suggested duplicate is not the same question as I am trying to use the last_insert_id() function.
Use Transactions, first execute the first command and get Last Insert Id, use it on the next insert.
public function addContact($cnt_fname,$cnt_lname,$cnt_email,$cnt_phone,$cnt_type,$cnt_company,$cnt_web,$cnt_add1,$cnt_add2,$cnt_city,$cnt_state,$cnt_post,$cnt_country,$cnt_status)
{
try {
$db->beginTransaction();
$stmt = $db->prepare("INSERT INTO LeadContact(lead_fname,lead_lname,lead_email,lead_phone,lead_type,lead_company,lead_add1,lead_add2,lead_city,lead_state,lead_post,lead_country,lead_status)
VALUES(:cnt_fname,:cnt_lname,:cnt_email,:cnt_phone,:cnt_type,:cnt_company,:cnt_add1,:cnt_add2,:cnt_city,:cnt_state,:cnt_post,:cnt_country,:cnt_status)");
$stmt->bindparam(":cnt_fname", $cnt_fname);
$stmt->bindparam(":cnt_lname", $cnt_lname);
$stmt->bindparam(":cnt_email", $cnt_email);
$stmt->bindparam(":cnt_phone", $cnt_phone);
$stmt->bindparam(":cnt_type", $cnt_type);
$stmt->bindparam(":cnt_company", $cnt_company);
$stmt->bindparam(":cnt_add1", $cnt_add1);
$stmt->bindparam(":cnt_add2", $cnt_add2);
$stmt->bindparam(":cnt_city", $cnt_city);
$stmt->bindparam(":cnt_state", $cnt_state);
$stmt->bindparam(":cnt_post", $cnt_post);
$stmt->bindparam(":cnt_country", $cnt_country);
$stmt->bindparam(":cnt_status", $cnt_status);
$insertId = $db->lastInsertId();
$stmt = $db->prepare("INSERT INTO LeadCompany(company_phone,company_type,company_name,company_website,company_add1,company_add2,company_city,company_state,company_post,company_country,company_status,company_contact)
VALUES(:cnt_phone,:cnt_type,:cnt_company,:cnt_web,:cnt_add1,:cnt_add2,:cnt_city,:cnt_state,:cnt_post,:cnt_country,:cnt_status,:id)");
$stmt->bindparam(":cnt_phone", $cnt_phone);
$stmt->bindparam(":cnt_type", $cnt_type);
$stmt->bindparam(":cnt_company", $cnt_company);
$stmt->bindparam(":cnt_web", $cnt_web);
$stmt->bindparam(":cnt_add1", $cnt_add1);
$stmt->bindparam(":cnt_add2", $cnt_add2);
$stmt->bindparam(":cnt_city", $cnt_city);
$stmt->bindparam(":cnt_state", $cnt_state);
$stmt->bindparam(":cnt_post", $cnt_post);
$stmt->bindparam(":cnt_country", $cnt_country);
$stmt->bindparam(":cnt_status", $cnt_status);
$stmt->bindparam(":id", $insertId);
$stmt->execute();
$db->commit();
} catch (PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
throw $ex;
}
}
Separating the queries might help, you need to first execute the first query then get the ID of that first insert then use the id to insert new table.Remember, if you use a transaction you should use lastInsertId BEFORE you commit otherwise it will return 0
<?php
public function addContact($cnt_fname, $cnt_lname, $cnt_email, $cnt_phone, $cnt_type, $cnt_company, $cnt_web, $cnt_add1, $cnt_add2, $cnt_city, $cnt_state, $cnt_post, $cnt_country, $cnt_status)
{
try {
$this->conn->BeginTransaction();
$stmt = $this->conn->prepare("INSERT INTO LeadContact(lead_fname,lead_lname,lead_email,lead_phone,lead_type,lead_company,lead_add1,lead_add2,lead_city,lead_state,lead_post,lead_country,lead_status)
VALUES(:cnt_fname,:cnt_lname,:cnt_email,:cnt_phone,:cnt_type,:cnt_company,:cnt_add1,:cnt_add2,:cnt_city,:cnt_state,:cnt_post,:cnt_country,:cnt_status);");
$stmt->bindparam(":cnt_fname", $cnt_fname);
$stmt->bindparam(":cnt_lname", $cnt_lname);
$stmt->bindparam(":cnt_email", $cnt_email);
$stmt->bindparam(":cnt_phone", $cnt_phone);
$stmt->bindparam(":cnt_type", $cnt_type);
$stmt->bindparam(":cnt_company", $cnt_company);
$stmt->bindparam(":cnt_add1", $cnt_add1);
$stmt->bindparam(":cnt_add2", $cnt_add2);
$stmt->bindparam(":cnt_city", $cnt_city);
$stmt->bindparam(":cnt_state", $cnt_state);
$stmt->bindparam(":cnt_post", $cnt_post);
$stmt->bindparam(":cnt_country", $cnt_country);
$stmt->bindparam(":cnt_status", $cnt_status);
if ($stmt->execute()) {
//insert to table 2
$inserted_id = $this->conn->lastInsertId(); //get last id
$sql = $this->conn->prepare("INSERT INTO LeadCompany(company_phone,company_type,company_name,company_website,company_add1,company_add2,company_city,company_state,company_post,company_country,company_status,company_contact)
VALUES(:cnt_phone,cnt_type,:cnt_company,:cnt_web,:cnt_add1,:cnt_add2,:cnt_city,:cnt_state,:cnt_post,:cnt_country,:cnt_status,:insertid)");
$sql->bindparam(":cnt_fname", $cnt_fname);
$sql->bindparam(":cnt_lname", $cnt_lname);
$sql->bindparam(":cnt_email", $cnt_email);
$sql->bindparam(":cnt_phone", $cnt_phone);
$sql->bindparam(":cnt_type", $cnt_type);
$sql->bindparam(":cnt_company", $cnt_company);
$sql->bindparam(":cnt_add1", $cnt_add1);
$sql->bindparam(":cnt_add2", $cnt_add2);
$sql->bindparam(":cnt_city", $cnt_city);
$sql->bindparam(":cnt_state", $cnt_state);
$sql->bindparam(":cnt_post", $cnt_post);
$sql->bindparam(":cnt_country", $cnt_country);
$sql->bindparam(":cnt_status", $cnt_status);
$sql->bindparam(":insertidr", $inserted_id);
if ($sql->execute()) {
return $sql;
}
} else {
throw new Exception("Error inserting");
}
if ($this->conn->commit()) {
$success = true;
} else {
throw new Exception('Transaction commit failed.');
}
}
catch (Exception $e) {
try {
// something went wrong, we have to rollback
$this->conn->rollback();
// and display the error message
echo $e->getMessage();
}
catch (Exception $f) {
// and display the error message
echo $f->getMessage();
}
}
}
?>
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