来自csv数据的Mysql更新命令

时间:2018-05-23 12:43:39

标签: mysql

我会围成一圈,请有人帮忙解决我认为相对容易的问题。

我有一个包含1200个用户的表。 表db_user_accounts中的一个字段是' status' 我有一个csv中这些用户的子列表,我想设置' status'到' 5' csv是有序的用户,状态

我发现了这个 -

<?php
    if (($handle = fopen("input.csv", "r")) !== FALSE)
    {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
        {
            mysql_query(UPDATE db-user_accounts SET status="{$data[1]}" WHERE user = "{$data[0]}"); 
        }
    fclose($handle);
    }
?>

我不确定1000的用途是什么,或者这实际上是否有用。 任何建议都感激不尽 感谢

1 个答案:

答案 0 :(得分:0)

这段代码似乎很好,应该可行。 1000是该行的长度,如PHP手册(引用如下):

价:http://php.net/manual/en/function.fgetcsv.php

  

必须大于要找到的最长行(以字符为单位)   CSV文件(允许尾随行尾字符)。除此以外,   除非拆分,否则该行将被拆分为长度为字符的块   会发生在一个外壳内。

     

省略此参数(或在PHP 5.1.0及更高版本中将其设置为0)   最大线长度不受限制,稍微慢一些。

您的代码的作用是:

  1. 以读取模式打开CSV文件,如果文件成功打开,它将进入循环
  2. 然后它将逐行开始读取(考虑行长度最多为1000),直到文件结束。第三个参数,是分隔符。
  3. 输出变量$data将包含从当前行读取的值,即它将保留用户帐户ID和状态。
  4. 然后您正在运行MySQL查询以更新数据库。
  5. 最后关闭已打开的CSV文件。
  6. 现在,建议:

    您直接将从CSV文件读取的值传递给纯SQL查询,这样做可能会导致意外错误,最差SQL injection

    我建议对从CSV文件读取的数据执行某种输入验证,然后使用parameterized SQL query

    此外,您正在使用deprecated的MySQL函数。使用MysqliPDO