Возьмите последний идентификатор вставки из одной таблицы, чтобы поместить в другую таблицу - PullRequest
0 голосов
/ 14 марта 2012

вероятно, простой для вас, разработчиков там

У меня есть этот код для вставки order_id и order_name в таблицу 'orders':

<?php
// start the session handler
require_once('dbfunction.php');

//connect to database
$conn = DB();

require_once('header.php');

//should we process the order?
if (isset($_POST['process'])) {

$order_name = $_POST['order_name'];

//create initial order
$stmt = $conn2->prepare("INSERT INTO orders (order_name) VALUES (?)");

//bind the parameters
    $stmt->bind_param('s', $order_name);

    // Execute query
    $stmt->execute();

Теперь я хочу вставить элементы заказа в таблицу order_items, и я не могу сохранить тот же идентификатор, который был создан при вставке в таблицу orders, и добавить его в таблицу order_items вместе с order_items. Вот мой код:

//this gets the most recent auto incremented ID from the database - this is the order_id we have just created
$order_id = mysql_insert_id();

//loop over all of our order items and add to the database
foreach ($_SESSION['order'] as $item) {

  $prod_id = $item['prod_id'];
  $quantity = $item['quantity'];
  $prod_type = $item['prod_type'];

  $stmt = $conn2->prepare("INSERT INTO order_items (order_id, prod_id, quantity, prod_type) VALUES (?, ?, ?, ?)");

  //bind the parameters
    $stmt->bind_param('iiis', $order_id, $prod_id, $quantity, $prod_type);

    // Execute query
    $stmt->execute();
}

    echo "<p class='black'>Order Processed</p>";

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Я думаю, это потому, что любая используемая вами библиотека базы данных делает что-то для аннулирования mysql_insert_id (при условии, что она даже использует функции mysql). Я бы посоветовал вам заглянуть в библиотеку, чтобы узнать, какой метод они предлагают вместо вас использовать.

1 голос
/ 14 марта 2012

SQL Server имеет @@ IDENTITY

Похоже, что mySQL имеет LAST_INSERT_ID ();

Я предполагаю, что вы используете mySQL.Если нет, то, пожалуйста, дайте мне знать версию, чтобы я мог обновить

...