Как сохранить каждую строку многострочного текста в mysql отдельно

Я новичок в php и mysql, так что потерпите меня, если мой вопрос покажется глупым.

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

Предположим, что у меня есть следующий текст:

заголовок1,имя1,url1,номер1

заголовок2,имя2,url2,номер2

заголовок3,имя3,url3,номер3

Я не уверен, нужно ли мне использовать

$lines=explode("\n",$mytext)

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

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


person Omid    schedule 05.05.2014    source источник
comment
Сначала разбейтесь на строки. А затем взорваться в ценности. А затем вставьте в каждое поле строки таблицы.   -  person Ravinder Reddy    schedule 05.05.2014
comment
Это похоже на csv, это данные csv?   -  person Bryan P    schedule 05.05.2014
comment
Могу ли я создать многомерный массив строк с помощью взрыва? Скажем, первый элемент будет обозначать строку, а второй — слово?   -  person Omid    schedule 05.05.2014
comment
Вы пробовали это? Вы получаете какую-либо ошибку ??   -  person Jenz    schedule 05.05.2014
comment
Это не данные в формате CSV, но я мог бы сохранить их как CSV, если это поможет.   -  person Omid    schedule 05.05.2014
comment
@Jenz Я не получаю никаких ошибок. Я не знаю, как идти дальше. взрыв линий - это самое далекое, что я сделал. Я не знаю, куда идти оттуда.   -  person Omid    schedule 05.05.2014
comment
текст взят из файла .txt?   -  person user1978142    schedule 05.05.2014
comment
Нет, на самом деле это происходит из формы, использующей POST.   -  person Omid    schedule 05.05.2014


Ответы (1)


Это должно сделать это, не уверен насчет части mysql, я просто посмотрел на w3schools.com

$con = mysqli_connect('host','username','password','dbname');

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
} else {

    // Slice the data by lines first.
    $linesOfData = explode('\n',$myText); // becomes an array of data

    // $linesOfData = array_filter($linesOfData); // uncomment this if you feel like the data will come with an empty line, removes any empty values in the array.

    // loop through the sliced data
    foreach($linesOfData as $lineOfData) {
        $arrayOfValues = explode(',',$lineOfData);

        // loop through the array of values
        foreach($arrayOfValues as $value) {
            /*  condition_statement ? value_if_yes : value_if_false
                This is equivalent to 
                if(!empty($value[0]){$title=$value[0]}else{$title=null}
                to check if the array has that index, to avoid error
            */
            $title  = !isset($value[0]) ? trim($value[0]) : null;
            $name   = !isset($value[1]) ? trim($value[1]) : null;
            $url    = !isset($value[2]) ? trim($value[2]) : null;
            $number = !isset($value[3]) ? trim($value[3]) : null;

            // insert to database, not recommended for commercial projects, this is vulnerable to sql injections, you should learn about prepared statements.
            mysqli_query($con,"INSERT INTO tablename (title, name, url, number) VALUES ('$title','$name','$url','$number')");
        }
    }

    // close the connection immediately after using it
    mysqli_close($con);
}
person Bryan P    schedule 05.05.2014
comment
Я также добавил команды mysql на тот случай, если вы еще не знаете - person Bryan P; 05.05.2014
comment
Добавьте trim() для каждого значения, чтобы убедиться, что вы охватываете такие случаи, как: title1, name1 ,url1 , number1. Также было бы полезно сопоставление индексов в тексте и используемых переменных, чтобы упростить поддержку расширения сценария. Как 2_. Затем вы просматриваете этот массив, проверяете установленный индекс и устанавливаете $data['title'] = $value[0]. Если не найдено, просто установите его на NULL. - person func0der; 05.05.2014
comment
Что касается сопоставления, да, это хорошая практика в сочетании с implode() в части VALUES, но оператор не спрашивал об этом, поэтому его больше не следует добавлять, чтобы не усложнять понимание начинающим OP. . Я добавил предложенную вами отделку. - person Bryan P; 05.05.2014
comment
Да, но, как вы сказали: он/она новичок, поэтому он/она должен как можно скорее познакомиться с передовой практикой, прежде чем плохая практика сгорит в его/ее голове ^^ По крайней мере, один должен знать об этих вещах. . - person func0der; 05.05.2014