Php 多个请求同时出现错误的SQL结果
我面临一个未知的问题,我创建了一个连接到Mysql的PHP API(Slim framework+Slim PDO)。我使用Nginx作为HTTP服务器。API使用“设备id”头来识别客户端(android应用程序)。令人担忧的是,最近android应用程序的一次更新使得在启动此应用程序时,如果用户未知,它现在会在结果API上发出两个异步请求。我发现自己的表中有两个条目,用户携带相同的设备id 在中间件中Php 多个请求同时出现错误的SQL结果,php,mysql,nginx,pdo,slim,Php,Mysql,Nginx,Pdo,Slim,我面临一个未知的问题,我创建了一个连接到Mysql的PHP API(Slim framework+Slim PDO)。我使用Nginx作为HTTP服务器。API使用“设备id”头来识别客户端(android应用程序)。令人担忧的是,最近android应用程序的一次更新使得在启动此应用程序时,如果用户未知,它现在会在结果API上发出两个异步请求。我发现自己的表中有两个条目,用户携带相同的设备id 在中间件中 $user = new User($device_id, $ip); 在用户类中 f
$user = new User($device_id, $ip);
在用户类中
function __construct($device_id, $ip)
{
$this->_device_id = $device_id;
$this->_ip = $ip;
if ($this->isExists())
$this->updateInfo();
else
$this->createUser();
}
private function isExists()
{
global $db_core;
$selectStatement = $db_core->select(array('id', 'current_group'))
->from('users')
->where('device_id', '=', $this->_device_id);
$stmt = $selectStatement->execute();
if ($stmt->rowCount() > 0)
{
$u = $stmt->fetch();
$this->_id = $u['id'];
$this->_current_group = $u['current_group'];
return true;
}
return false;
}
函数的作用是:在用户表中创建一个条目,其中包含设备id以及日期等其他信息
提前感谢您的帮助
INSERT INTO users (...) VALUES(:device_id, :ip, ...)
ON DUPLICATE KEY UPDATE ip = values(ip) , ...
只更新某个错误非常重要,否则重新抛出它。请注意:PDO连接选项
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
必须设置为抛出PDO EXCEPTION
。
$this->_device_id = $device_id;
$this->_ip = $ip;
try {
$this->createUser();
} catch (PDOException $e) {
$search = "!Integrity constraint violation: 1062 Duplicate entry\ .*? for key 'device_id'!";
if (preg_match($search, $e->getMessage())) {
$this->updateInfo();
} else {
throw $e;
}
}