我正在将用户写入数据库,如果页面超时,我希望能够启动“我是不会离开的”。
我目前的代码在这里
$sql = "SELECT *
FROM `user`
WHERE `setting` LIKE CONVERT( _utf8 '1 %'
USING latin1 )
COLLATE latin1_swedish_ci";
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
//add a user to seperate database
}
正如您所看到的那样非常简单,但如果页面失败,我无法知道我在哪里,它会添加两次用户。任何想法该怎么做?
答案 0 :(得分:2)
执行此操作的最佳方法是使用IF NOT EXISTS子句。首先通过它的email-id或任何其他唯一密钥检查用户是否存在于新数据库中。然后插入用户(如果不存在)。
答案 1 :(得分:1)
虽然可以通过在字段上创建唯一(用户ID)的UNIQUE INDEX
来处理这一点。
但在这种情况下,仍然会从第一个记录重复静止过程。
所以,我们应该在$sql
中更好地处理它,如下所示:
$sql = "SELECT *
FROM `db1.user`
WHERE `setting` LIKE CONVERT( _utf8 '1 %'
USING latin1 ) and userid NOT in (Select userid from `db2.user`)
COLLATE latin1_swedish_ci";
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以(也可能应该)isolate your script using transactions与unique index结合使用。如果您正确构建交易,您将知道准确您所在的位置。
答案 4 :(得分:0)
除了其他之外,或者在user
表中创建一个布尔列,并将默认值设置为0.在循环块中将用户行更新为1.这样你就会知道你离开了哪里关闭。并在SQL语句中添加AND
子句,如下所示
$sql = "SELECT *
FROM `user`
WHERE `setting` LIKE CONVERT( _utf8 '1 %'
USING latin1 )
AND `carried`= 0
COLLATE latin1_swedish_ci";
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
//add a user to seperate database
mysql_query(UPDATE `user` SET `carried`=1 WHERE `id` = $row['id'])
}
完成后,您可以删除carried
列。