MySQL - 在INSERT上返回生成的AUTO_INCREMENT值

时间:2012-01-17 14:38:01

标签: php mysql

希望是一个简单的方法 - 我无法找到一个强大的解决方案。

我正在构建一个生成id_cart AUTO_INCREMENT主键的购物车机制。购物车商品有另一张表,其中包含尺寸等购物车产品变量。我想在大小表中使用相同的id_cart。

CREATE TABLE
-> id_size_cart NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> id_cart //THIS WILL BE THE AI value from the product cart
-> size_name

我见过SELECT LAST_INSERT_ID()。

这是多么可靠,以确保它是最后插入的ID?不希望客户的尺寸错误!

__ 编辑 ___

感谢您的输入。不过,我遇到了麻烦。请参阅下面的实际代码;

//add product to cart table
$addtocart_sql = "INSERT INTO store_cart (id_cart, id_session) VALUES ('', '".$_COOKIE["PHPSESSID"]."')";
$addtocart_res = mysqli_query($dbConnect, $addtocart_sql) or die(mysqli_error($dbConnect));

$last_row_id = mysqli_query($dbConnect, "SELECT LAST_INSERT_ID()") or die(mysqli_error($dbConnect));

echo 'INSERT worked!<br/>';
echo $last_row_id;

错误显示为

  

解析错误:语法错误,在/websites/LinuxPackage05/4v/35/xy/4v35xy-55415.webfusion-hosting.co.uk/public_html/noff-group.com/dev/add_to_cart.php上的意外T_STRING在线27

提前致谢。

4 个答案:

答案 0 :(得分:8)

来自the manual

  

对于LAST_INSERT_ID(),最近生成的ID是基于每个连接在服务器中维护的。它不会被另一个人改变   客户。如果您更新另一个AUTO_INCREMENT,它甚至不会更改   具有非魔法值的列(即,不是NULL和的值   不是0)。使用LAST_INSERT_ID()AUTO_INCREMENT列   同时来自多个客户端是完全有效的。每个客户   将收到最后一个语句 客户端的最后插入的ID   执行。

答案 1 :(得分:2)

如果您使用InnoDB作为表类型,那么您将能够通过简单地将整个事物包装在事务中来确保您获得正确的ID。

MyISAM没有事务,但是获取最后一个插入ID时的行为是基于连接的。如果同时打开多个连接并且它们都插入到同一个表中,则每个连接将返回它们插入的记录的ID。它不如innoDB提供的真正的事务支持强大,但任何一个用户都不太可能得到错误的ID。

答案 2 :(得分:0)

我已经在某个地方读过,我可以绝对肯定这一点以及我阅读它的来源,如果你想确定不要依赖LAST_INSERT_ID。使用与插入记录相同的参数来选择新创建的记录并获取其ID。它与mysql的实现和线程等有关。

那就是说,我从来没有见过这样的实现,我也没有使用那种方法。但是,记住这一点很有帮助。

答案 3 :(得分:0)

我的语法略有不同 - 请参阅下面的代码,返回正确的最后ID。

//add product to cart table
$addtocart_sql = "INSERT INTO store_cart (id_cart, id_session) VALUES ('', '".$_COOKIE["PHPSESSID"]."')";
$addtocart_res = mysqli_query($dbConnect, $addtocart_sql) or die(mysqli_error($dbConnect));

// REQUIRED 'i' + '$dbConnect' for MYSQLI function
echo 'INSERT worked!<br/>';
echo mysqli_insert_id($dbConnect);

再次感谢所有帮助!