Php 防止其他用户同时插入数据

Php 防止其他用户同时插入数据,php,mysql,locking,Php,Mysql,Locking,我有一个php脚本,它允许用户编写一些内容,单击某个按钮后,编写的数据将与当前的时间戳一起插入mysql表data。很简单。现在,因为我想根据最高的时间戳从表中提取数据,所以我希望我的查询只提取最后一行的数据。记住这一点,我不能允许两个或多个用户同时插入数据,这将生成完全相同的时间戳,而这反过来将违背我查询数据的目的。虽然我知道生成完全相同的时间戳的几率很低,但我希望安全起见。这是我试过的 $sql_lock_table = $db->prepare("LOCK TABLES commen

我有一个php脚本,它允许用户编写一些内容,单击某个按钮后,编写的数据将与当前的时间戳一起插入mysql表
data
。很简单。现在,因为我想根据最高的
时间戳
从表中提取数据,所以我希望我的查询只提取最后一行的数据。记住这一点,我不能允许两个或多个用户同时插入数据,这将生成完全相同的时间戳,而这反过来将违背我查询数据的目的。虽然我知道生成完全相同的时间戳的几率很低,但我希望安全起见。这是我试过的

$sql_lock_table = $db->prepare("LOCK TABLES comments WRITE");
$sql_lock_table->$db->execute();

$time = time();
$data = "some data";

$sql_insert = $db->prepare("INSERT INTO data VALUES(null, :time, :thedata)");

$sql_insert->execute(array(
    "time" => $time,
    "thedata" => $data
    ));

$sql_unlock_table = $db->prepare("UNLOCK TABLES");
$sql_unlock_table->$db->execute(); 

我从另一个stackoverflow问题中得到了锁定和解锁,但我不清楚为什么要在插入前锁定表,因为它不允许任何人插入数据。所以我发现我是对的。没有发生插入。我应该怎么做才能实现我想要做的?

根据MySQL的属性,它不允许同时插入两个数据。所以你不需要采取任何预防措施

检查下面的链接

http://dev.mysql.com/doc/refman/5.6/en/internal-locking.html

您可以指定表引擎吗

如果您的表是InnoDB,则可以在MyISAM引擎的同一时间出现两条insert语句,将锁定表以进行insert操作,从而防止发生其他插入


如果您不需要InnoDB,如果您将其更改为MyISAM,mysql引擎将注意到只有一个插入可以发生,而另一个将阻塞,直到当前插入完成

结帐:


希望这会有点帮助……

我和另一个人测试了一下。显然,准确地点击按钮意味着同时插入数据。当时我正在创建一个购物车,它不允许产品数量小于0。因此,当我们同时单击“立即付款”按钮时,电子查询应该检查产品的值是否大于0。如果大于0,则付款按钮不会显示任何错误并更新数量--。但在同时单击时,我们没有遇到任何错误,更新后的表的数量为“-1”,我的表是InnoDB而不是MyISAM。。我可以在InnoDB中实现这一点吗?InnoDB不是用于事务的吗?如果您不需要InnoDB用于任何目的,如果您将其更改为MyISAM,mysql引擎将注意只会发生一次插入,其他将阻塞,直到当前插入完成