php - 防止另一个用户同时插入数据

标签 php mysql locking

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

$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

关于php - 防止另一个用户同时插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483733/

相关文章:

php - 不使用 mysqli 处理 MySQL 事务

php - Codeigniter 优化/加载模型的最佳位置是?

c# - 如何判断连接字符串属于 MySql 还是 SQL Server?

php - "INSERT INTO"没有向数据库中插入数据

java - 多线程多锁似乎比单锁慢

javascript - 添加查看更多按钮

php - 在PHP和MySql中创建一个累积比较表

mysql - 从数据库传递 row.id 以在函数中返回 - Node.js

Python - 多线程 - Lock 必须是全局的吗?

python多处理锁问题