使用 ->insert_id 时 MYSQL 重复

MYSQL duplicates when using ->insert_id

提问人:Allen Harris 提问时间:12/9/2014 最后编辑:Allen Harris 更新时间:12/9/2014 访问量:296

问:

当我让它工作时我很高兴,但除非我注释掉最后两行,否则它会提交两次订单。有没有更好的方法来编写它,这样我就不会得到重复?

$sql = "INSERT INTO orders (weight, shipper, shipacct) VALUES ('$weight', '$shipper', '$shipacct')";
$conn->query($sql);
$recordid = $conn->insert_id;

我这样做是因为我尝试使用记录 ID 作为订单 ID。我在购买收据上将此订单 ID 回显给客户。

更新的代码:

$sql = "INSERT INTO orders (weight, shipper, shipacct) VALUES ('$weight', '$shipper', '$shipacct')";
$recordid = mysql_insert_id();

没有重复项,但不返回记录 ID。

mysql 插入 ID

评论

0赞 gen_Eric 12/9/2014
$conn->query($sql);是实际运行查询的行。如何调用此代码?你可能会调用它两次,或者发布表单两次,或者使用循环或其他东西。
0赞 Michael Berkowski 12/9/2014
检查代码是否被调用两次的意外位置: 您是否有执行重定向的重写规则?您是否有任何或类似的标签错误地具有空属性,导致它们两次请求相同的 URL?<img><link>src=
0赞 Barranka 12/9/2014
以防万一:我认为您的查询可能容易受到 SQL 注入攻击。看这里
0赞 Allen Harris 12/9/2014
我删除了$conn行,它停止插入重复项。但是,$recordid行不会返回记录 ID。使用 $recordid = mysql_insert_id() 时返回空白;

答:

0赞 Benison Sam 12/9/2014 #1

警告

This extension is deprecated as of PHP 5.5.0, and will be removed in the future.
Instead, the MySQLi or PDO_MySQL extension should be used.
See also MySQL: choosing an API guide and related FAQ for more information.
Alternatives to this function include:
mysqli_insert_id()
PDO::lastInsertId()

请尝试以下操作:

$sql = "INSERT INTO orders (weight, shipper, shipacct) VALUES ('$weight', '$shipper', '$shipacct')";
$conn->query($sql);
$recordid = mysql_insert_id();

注意:
由于 mysql_insert_id() 作用于上次执行的查询,因此请确保在生成值的查询后立即调用 mysql_insert_id()。

希望这个和这个会有所帮助......