【问题标题】:How to insert additional data into mysql while using implode如何在使用 implode 时将其他数据插入 mysql
【发布时间】:2011-11-09 07:44:56
【问题描述】:

代码如下:

    if (($handle = fopen($source_file, "r")) !== FALSE) {
    $columns = fgetcsv($handle, $max_line_length, ",");
    foreach ($columns as &$column) {
        $column = str_replace(".","",$column);
    }
    while (($data = fgetcsv($handle, $max_line_length, ",")) !== FALSE) {
        while(count($data) < count($columns)) {
            array_push($data, NULL);
        }
        $c = count($data);
        for($i = 0; $i < $c; $i++) {
            $data[$i] = "'{$data[$i]}'";
        }

        $sql[] = '(' . implode(',',$data) . ','.$_POST[group].')';
    }
            $sql = implode(',',$sql);

    $query = "INSERT INTO mytable (".mysql_real_escape_string(implode(",",$columns)).",Custgroup,user_id) VALUES " 
                      . $sql . "\n";
    mysql_query($query) or trigger_error(mysql_error());

    fclose($handle);
      }
     } 

如果我的 csv 文件是:

姓氏、名字、性别

鲍勃,啊,男

所以现在查询将是:INSERT INTO mytable (lastname,firstname,gender) VALUES ('bob','ah','male')。 但是如果我想将额外的数据与 csv 文件中的数据一起插入到 mysql 中呢? 比如我有一个值 $_POST['group'] = 'family' 和 $_POST['user_id'] = '10',所以我试了一下:

$sql[] = '(' . implode(',',$data) . ','.$_POST[group].','.$_POST[user_id].')';

$query = "INSERT INTO $target_table (".mysql_real_escape_string(implode(",",$columns)).",custgroup,user_id) VALUES " 
                      . implode(',',$sql) . "\n";

但在查询中它将变为:INSERT INTO mytable (lastname,firstname,gender,custgroup,user_id) VALUES ('bob','ah','male',family,10)。 它没有单引号,所以插入记录时出错。请问如何解决这个问题?

【问题讨论】:

  • 做mysql_real_escape_string(implode(',', $columns))有什么意义?

标签: php mysql csv insert


【解决方案1】:

试试这个:

$sql[] = '(' . implode(',', $data) . ", '" . $_POST['group'] . "'," . $_POST['user_id'] . ')';

$query = "INSERT INTO $target_table (" . mysql_real_escape_string(implode(',', $columns)) . ',custgroup,user_id) VALUES ' . implode(',', $sql);

【讨论】:

  • 非常感谢。现在查询是:INSERT INTO UserAddedRecord (lastname,firstname,cell,custgroup,user_id) VALUES ('Last','First','042819679','Family',1 )
  • mysql_real_escape_string(implode(',', $columns)) 的意义何在?
【解决方案2】:

为了便于阅读,您可以考虑以下内容:

$sql = sprintf("(%s,'%s',%d)",
    implode(',', $data),
    $_POST['group'],
    $_POST['user_id']
);

这让您可以更灵活地了解代码的实际执行情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多