i am trying to get the last id inserted in my sql query, but my varieble returns with NULL
here is my code
$conn->beginTransaction();
try{
$stmt=$conn->prepare("SELECT cn_id FROM food_category WHERE catname= :catname");
$stmt->bindParam(':catname', $_POST['catname'], PDO::PARAM_STR);
$stmt->execute();
$catres= $stmt->fetch(PDO::FETCH_ASSOC);
if(count($catres) > 0 ){
$cn_id= $catres['cn_id'];
}else{
$stmt1= $conn->prepare("INSERT INTO food_category (catname) VALUES (:catname)");
$stmt1->bindParam(':catname', $_POST['catname'], PDO::PARAM_STR);
$stmt1->execute();
$cn_id= $stmt1->lastInsertId();
}
$stmt2=$conn->prepare("SELECT cn_id FROM food_category_en WHERE catname= :catname_en");
$stmt2->bindParam(':catname_en', $_POST['catname_en'], PDO::PARAM_STR);
$stmt2->execute();
$catresen= $stmt2->fetch(PDO::FETCH_ASSOC);
if(count($catresen) > 0 ){
$cn_id_en= $catresen['cn_id'];
}else{
$stmt3= $conn->prepare("INSERT INTO food_category_en (catname) VALUES (:catname_en)");
$stmt3->bindParam(':catname_en', $_POST['catname_en'], PDO::PARAM_STR);
$stmt3->execute();
$cn_id_en= $stmt3->lastInsertId();
}
$stmt4=$conn->prepare("INSERT INTO food_category_main (st_id, cn_id, cn_id_en, catcount) VALUES (:st_id, :cn_id, :cn_id_en, :catcount)");
$stmt4->bindParam(':st_id', $_POST['st_id'], PDO::PARAM_INT);
$stmt4->bindParam(':cn_id', $cn_id, PDO::PARAM_INT);
$stmt4->bindParam(':cn_id_en', $cn_id_en, PDO::PARAM_INT);
$stmt4->bindParam(':catcount', $noc, PDO::PARAM_INT);
$stmt4->execute();
$stmt5=$conn->prepare("UPDATE magazia_main SET noc= :noc WHERE st_id= :st_id");
$stmt5->bindParam(':st_id', $_SESSION['st_id'], PDO::PARAM_INT);
$stmt5->bindParam(':noc', $noc, PDO::PARAM_INT);
$stmt5->execute();
$conn->commit();
header ("Location:dashboard.php?store=".$_SESSION['name']);
exit;
}catch(Exception $e){
//An exception has occured, which means that one of our database queries
//failed.
//Print out the error message.
echo $e->getMessage();
//Rollback the transaction.
$conn->rollBack();
}
I read in the php manual here that if am i using transaction the lastInsertId will return 0. As you see both lastInsertId (1st in stmt1, 2nd in stmt3) are before $conn->commit();, although they return with NULL.
cn_id in food_category and cn_id in food_category_en are both primary keys and AUTO_INCREMENT
i search for some solutions in the internet but none of them seems to fix my problem.
here is a printscreen from php my admin
*** connection to database****
$servername = "localhost";
$username = "root";
$password = "12345";
try {
$conn = new PDO("mysql:host=$servername;dbname=superdb; charset=utf8", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
Any ideas?
Thanks in advance
Vaggelis