Как вставить дополнительные данные в MySQL при использовании Implode - PullRequest
0 голосов
/ 09 ноября 2011

вот код:

    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').Но как, если я хочу вставить дополнительные данные в MySQL вместе с данными в CSV-файле?Например, у меня есть значение $ _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).У него не было одинарных кавычек, поэтому у меня ошибка при вставке записи. Могу ли я решить эту проблему?

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

попробуйте это:

$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);
0 голосов
/ 09 ноября 2011

для удобства чтения вы можете рассмотреть следующее:

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

, что дает вам больше гибкости и понимания того, что на самом деле выполняет ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...