PHP - добавление строки в переменную (массив) CSV -> MySQL

У меня проблема, которая просто расстраивает мой разум, я не могу добавить строку, постепенно загружаемую из файла CSV, в массив (через цикл while), который после записи в базу данных.

Код выполняется, он повторяет тот факт, что он записал в базу данных, но на самом деле ничего не происходит, когда я удаляю строку, которую он записывает в базу данных, просто отлично.

Синтаксис должен быть $variable = 'string' . $ CsvValue; Он не будет записывать в базу данных, когда это так, но будет, когда это так: $variable = $csvValue;

Вот код:

<?php
// Script to insert data from a CSV-file with AD information in it to a MySQL database.

// Connect to the database 
$connect = mysqli_connect("localhost","root","password","dbname"); 

if(!$connect){
   die('Could not <span id="IL_AD1" class="IL_AD">
    connect to</span> MySQL: ' . mysql_error());
}

// Charset
mysqli_query($connect, "SET NAMES 'utf8'");

// File path
define('CSV_PATH','/home/administrator/Desktop/'); 

$csvName = CSV_PATH . "AnsattInfo.csv"; // Name of CSV-file
$csvfile = fopen($csvName, 'r');
$theData = fgets($csvfile);
$i = 0;

while(!feof($csvfile)){

    $csv_data[] = fgets($csvfile, 2048);
    $csv_array = explode(",", $csv_data[$i]);
    $insert_csv = array();
    $insert_csv['sAMAccountName'] = $csv_array[0];
    $insert_csv['displayName'] = $csv_array[1];
    $insert_csv['employeeNumber'] = $csv_array[2];
    $insert_csv['mail'] = $csv_array[3];
    $insert_csv['company'] = $csv_array[4];
    $footer = str_replace(' ', '_', $insert_csv['company']);
    //$footer = '@' . str_replace(' ', '_', $insert_csv['company']);

    $query = "INSERT INTO playsms_tblUserTest (status, username, enable_webservices, webservices_ip, name, mobile, email, footer, country, datetime_timezone, language_module, fwd_to_mobile, send_as_unicode)
        VALUES(
            3,
            ".$insert_csv['sAMAccountName'].",
            1,
            '*.*.*.*',
            ".$insert_csv['displayName'].",
            ".$insert_csv['employeeNumber'].",
            ".$insert_csv['mail'].",
            ".$footer.",
            137,
            '+0100',
            'nb_NO',
            1,
            1         
    ) ON DUPLICATE KEY
        UPDATE name = $insert_csv[displayName], mobile = $insert_csv[employeeNumber], email = $insert_csv[mail], footer = $footer";

   mysqli_query($connect, $query);

   $i++;
}

fclose($csvfile);

echo "CSV successfully imported to User-table! \n";

mysqli_close($connect); // closing connection  
?>

Что я на самом деле хочу здесь сделать, так это добавить строку перед значением $footer, так как @ - это имя группы контактов, где "@" на самом деле указывает на то, что это группа.

В CSV-файле название компании не помечено знаком @, что я и хочу добавить. Как это:

$footer = '@' . str_replace(' ', '_', $insert_csv['company']);

Это не дает никаких синтаксических ошибок, но фактически ничего не записывается в базу данных.

У кого-нибудь есть предложение по решению здесь?

Приветствия за любую помощь.

1 ответ

Если поле footer в вашей базе данных есть какой-то "строковый тип", тогда вы также должны заполнить его строкой:

/* ... */
            ".$insert_csv['employeeNumber'].",
            ".$insert_csv['mail'].",
            '".$footer."',
            137,
            '+0100',
            'nb_NO',
            1,
            1         
    ) ON DUPLICATE KEY
        UPDATE name = $insert_csv[displayName], mobile = $insert_csv[employeeNumber], email = $insert_csv[mail], footer = '$footer'";
/* ... */

и чтобы объявить его как строку в вашем MySQL-запросе, вы должны поместить его между кавычками, как показано выше, с $footer значение.

я думаю, что вы получили одну и ту же ошибку несколько раз в вашем запросе: например, $insert_csv['mail'] я думаю, будет тоже строка

подсказка: если бы вы использовали какую-то обработку ошибок, то вы бы увидели, что есть какая-то ошибка mysql (так как я использую pdo я не знаю, как это работает в mysqli).

Другие вопросы по тегам