PDO Вставить запрос, не вставляя данные в базу данных?

У меня следующий код: первая вставка работает правильно и данные в базу данных, но второй запрос вставки, который зависит от last_insert_id() выходит из строя. Я пытался найти ошибку, но не смог этого сделать?

<?php
namespace Solutions\File;
class AddUserData {
function __construct($DB_con)
{
$this->db = $DB_con;
}
public function insert_detail($productDetails){
var_dump($productDetails);
try
{
$stmt = $this->db->prepare("INSERT INTO product_master(reg_id,category_id,sub_cat_id,product_name)  VALUES(:reg_id,:category_id,:sub_cat_id,:product_name)");
$query=$this->db->prepare("INSERT INTO gy_product_detail(product_id,product_detail,". "product_image_back,product_image_left,product_image_name,product_image_right,". "product_rate,product_discount) VALUES (last_insert_id(),:product_details,". ":product_image1,:product_image2,:product_image3,:product_image4,". ":rate,:discount");
$stmt->execute(array(':reg_id'=>$productDetails['registration_id'],
':category_id'=>$productDetails['catagory_id'],
':sub_cat_id'=>$productDetails['sub_cat_id'],
':product_name'=>$productDetails['product_name']));
$query->execute(array(
':product_details'=>$productDetails['product_details'],
':product_image1'=>$productDetails['image1']['name'],
':product_image2'=>$productDetails['image2']['name'],
':product_image3'=>$productDetails['image3']['name'],
':product_image4'=>$productDetails['image4']['name'],
':rate'=>$productDetails['product_cost'],
':discount'=>$productDetails['product_discount']));
return $stmt;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}

Кто-нибудь может подсказать, где я ошибаюсь и указать мне правильное направление, я не получаю ошибок, однако я включил отчет об ошибках?

некоторые ссылки, на которые я ссылался:
MySQL — почему LAST_INSERT_ID () не работает для меня?
MySQL: LAST_INSERT_ID () возвращает 0

1

Решение

Вы должны запросить последний идентификатор:
select last_insert_id()

измените ваш второй запрос на:

        $query=$this->db->prepare("INSERT INTO gy_product_detail(product_id,product_detail,". "product_image_back,product_image_left,product_image_name,product_image_right,". "product_rate,product_discount) VALUES ((select last_insert_id()),:product_details,". ":product_image1,:product_image2,:product_image3,:product_image4,". ":rate,:discount");
1

Другие решения

Вы должны использовать PDO :: lastInsertId, Я использую это ежедневно и никогда не обнаруживал проблем.

$stmt = $this->db->prepare("INSERT INTO product_master
(reg_id,category_id,sub_cat_id,product_name)
VALUES
(:reg_id,:category_id,:sub_cat_id,:product_name)
");

$stmt->execute([
':reg_id'       => $productDetails['registration_id'],
':category_id'  => $productDetails['catagory_id'],
':sub_cat_id'   => $productDetails['sub_cat_id'],
':product_name' => $productDetails['product_name']
]);

// get the ID from last executed statement ($stmt->execute())
$lastID = $this->db->lastInsertId();$query = $this->db->prepare("INSERT INTO gy_product_detail
(product_id,product_detail, product_image_back, product_image_left,
product_image_name, product_image_right, product_rate, product_discount)
VALUES
(:lastID,:product_details, :product_image1,:product_image2,
:product_image3,:product_image4, :rate, :discount)
");

$query->execute([
':lastID'          => $lastID,
':product_details' => $productDetails['product_details'],
':product_image1'  => $productDetails['image1']['name'],
':product_image2'  => $productDetails['image2']['name'],
':product_image3'  => $productDetails['image3']['name'],
':product_image4'  => $productDetails['image4']['name'],
':rate'            => $productDetails['product_cost'],
':discount'        => $productDetails['product_discount']
]);

return $stmt;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector