我必须从xls文件中读取大约5000行最多6列。我正在使用PHP> = 5.3。我将使用PHPExcel完成该任务。我没有尝试,但我认为它可以处理(如果你有其他选择,欢迎他们)。 问题是每次我读一行时,我都需要查询数据库以验证该特定行是否存在,如果存在,则覆盖它,如果不存在,则添加它。 我认为这需要花费很多时间,而PHP只会超时(我无法修改超时变量,因为它是共享服务器)。 你能帮我个忙吗? 感谢您的帮助
答案 0 :(得分:2)
由于您使用的是MySQL,所以您只需要插入数据,而不必担心会出现任何行。 以下是原因和方法:
如果从PHP查询数据库以验证存在行,那就不好了。它不好的原因是因为你容易得到错误的结果。 PHP和MySQL之间存在延迟,PHP无法用于验证数据完整性。这是数据库的工作。
为确保没有重复的行,我们在列上使用UNIQUE
约束。
MySQL使用INSERT INTO ... ON DUPLICATE KEY UPDATE
语法扩展SQL标准。这样您就可以只插入数据,如果有重复的行 - 您只需使用新数据进行更新即可。
快速阅读5000行。如果将其包装在事务中,插入5000也很快。我建议从excel文件中读取100行,启动一个事务并只插入数据(使用ON DUPLICATE KEY UPDATE
来处理重复项)。这样您就可以花1个I / O硬盘来保存100条记录。这样,您可以在几秒钟内完成整个过程,这样您就不必担心性能或超时。
答案 1 :(得分:-1)
首先通过exec运行此过程,并且超时无论如何 第二步,在读取excel文件之前选择所有行。不要在一个查询中选择,例如每次读取2000行,然后将其收集到数组中 第三种是使用xlsx格式和chunkReader,它允许读取不是整个文件。 它并非100%保证,但我做了同样的事情。