Php MYSQL在页面失败的情况下从我停止的地方开始

Php MYSQL在页面失败的情况下从我停止的地方开始,php,mysql,sql,Php,Mysql,Sql,我正在向数据库中写入用户,如果页面超时,我希望能够开始关闭 我现在的代码在这里 $sql = "SELECT * FROM `user` WHERE `setting` LIKE CONVERT( _utf8 '1 %' USING latin1 ) COLLATE latin1_swedish_ci"; while($row = mysql_fetch_array($res

我正在向数据库中写入用户,如果页面超时,我希望能够开始关闭

我现在的代码在这里

 $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


}
正如你所看到的,非常简单,但是如果页面失败,我无法知道我在哪里,它会添加两次用户。有什么办法吗?

如果您将使用INSERT语句添加新用户,并将适当的索引放置到位,那么这本身就足以确保用户不会在数据库中获得两次add

更多信息:

MySQL参考手册:
最好的方法是使用IF NOT EXISTS子句。首先通过用户的电子邮件id或任何其他唯一密钥检查该用户是否存在于新数据库中。如果用户不存在,则插入该用户

尽管这可以通过在字段上创建一个唯一的索引来解决,该索引应该是唯一的用户id

但在这种情况下,仍然会从第一条记录开始重复该过程

因此,我们最好在$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";

你可以,也可能应该和一个。如果事务结构正确,您将准确地知道自己的位置。

除其他外,还可以在用户表中创建一个布尔列,并将默认值设置为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'])
}


完成后,您可以删除携带的列。

如果其中两个表(例如username和emailtables或fields)上不存在,是否可以执行此操作?如果用户名和电子邮件是要插入用户的表的两个字段,则可以使用如下内容:-插入到用户表字段1、字段2、字段3值value1、value2、,值3如果不存在,请从username=somevalue和email=someothervalue的user_表中选择*是否可以添加另一个术语以进一步缩小结果范围。因为它们可能已经在此表中,只是其中一列的值不同。因此,如果它们不在其中,并且它们没有一个等于valueyes的条目,那么您也可以将where子句添加到该条目中。userid不在Select u2.userid from db2.user u2 where中