2015-12-31 4 views
1

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

<?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- Why is LAST_INSERT_ID() not working for me? MySQL: LAST_INSERT_ID() returns 0

+0

Я могу решить свою проблему с помощью ошибки fredi, которая связала меня с http://php.net/manual/en/pdo.error-handling.php thnks man –

ответ

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"); 
0

Вы должны использовать 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; 
Смежные вопросы