Php MySQL-在插入时返回生成的自动增量值

Php MySQL-在插入时返回生成的自动增量值,php,mysql,Php,Mysql,希望这是一个简单的问题——我无法找到一个可靠的解决方案 我正在构建一个cart机制,它生成一个id\u cart自动增量主键。购物车项目有另一个表,其中包含购物车产品变量,如大小。我想在尺寸表中为相同的id\u购物车添加属性 CREATE TABLE -> id_size_cart NOT NULL PRIMARY KEY AUTO_INCREMENT, -> id_cart //THIS WILL BE THE AI value from the product cart ->

希望这是一个简单的问题——我无法找到一个可靠的解决方案

我正在构建一个cart机制,它生成一个id\u cart自动增量主键。购物车项目有另一个表,其中包含购物车产品变量,如大小。我想在尺寸表中为相同的id\u购物车添加属性

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\u INSERT\u 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;
//将产品添加到购物车表
$addtocart\u sql=“插入存储购物车(id\u购物车,id\u会话)值(“,”$\u COOKIE[“PHPSESSID”]。”)”;
$addtocart_res=mysqli_query($dbConnect,$addtocart_sql)或die(mysqli_error($dbConnect));
$last_row_id=mysqli_query($dbConnect,“选择last_INSERT_id()”)或die(mysqli_error($dbConnect));
echo'插入成功
; echo$last\u row\u id;
错误显示为

分析错误:语法错误,第27行的/websites/LinuxPackage05/4v/35/xy/4v35xy-55415.webfusion-hosting.co.uk/public_html/noff-group.com/dev/add_to_cart.php中出现意外的T_字符串

提前感谢。

发件人:

对于
LAST\u INSERT\u ID()
,最近生成的ID将在服务器中按每个连接进行维护。它不会被其他人改变 客户如果您更新另一个
自动增量
具有非magic值(即非
NULL
的值)的列,以及 不是
0
)。使用
LAST\u INSERT\u ID()
AUTO\u INCREMENT
列 同时来自多个客户端是完全有效的。每个客户 将接收该客户端最后一条语句的最后一个插入ID 执行


如果您使用InnoDB作为表类型,那么您可以通过简单地将整个事务包装到事务中来确保获得正确的id


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

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


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

我的语法有点不正确-请参阅下面的代码,返回正确的最后一个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);
//将产品添加到购物车表
$addtocart\u sql=“插入存储购物车(id\u购物车,id\u会话)值(“,”$\u COOKIE[“PHPSESSID”]。”)”;
$addtocart_res=mysqli_query($dbConnect,$addtocart_sql)或die(mysqli_error($dbConnect));
//MYSQLI函数所需的“i”+“$dbConnect”
echo'插入成功
; echo mysqli_insert_id($dbConnect);

再次感谢所有的帮助

好吧,我猜这回答了我的问题。谢谢@jensgram。另外,我认为性能大致相同,但您可能会发现使用内置PHP函数
mysql\u insert\u id
更方便。这可能会使它更容易/更干净地存储在PHP变量中,但我认为性能大致相同。请注意,这句话基本上是正确的,即只要您没有使用同一连接插入多个线程。刚刚插入的行没有特定的行标识符-它是一个购物车,因此只有PHPSESSID和NOW()与产品变量一起使用。如果执行SELECT查询,您还可以考虑如何识别行吗?正如我提到的,如果您对多个连接不使用相同的连接请求,并且如果线程之间没有连接对象,那么您应该是安全的。即使是我的应用程序在实现时也考虑到了这些限制。请记住这些限制。第27行是哪一行?另外,这是一个PHP语法错误。我认为这与
SELECT LAST\u INSERT\u ID()
部分没有直接关系。(顺便说一句:有一个)