如果页面出现故障,MYSQL会从我中断的地方继续

时间:2013-05-27 02:34:09

标签: php mysql sql

我正在将用户写入数据库,如果页面超时,我希望能够启动“我是不会离开的”。

我目前的代码在这里

 $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


}

正如您所看到的那样非常简单,但如果页面失败,我无法知道我在哪里,它会添加两次用户。任何想法该怎么做?

5 个答案:

答案 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)

如果您将使用INSERT语句添加新用户并且具有适当的索引,那么这本身应该足以确保用户不会在数据库中添加两次。

更多信息:

答案 3 :(得分:0)

您可以(也可能应该)isolate your script using transactionsunique 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列。