【问题标题】:How to store each line of a multi-line text into mysql individually如何将多行文本的每一行单独存储到mysql中
【发布时间】:2014-06-21 08:52:12
【问题描述】:

我是 php 和 mysql 的初学者,如果我的问题听起来很愚蠢,请耐心等待。

我有一个多行文本,我需要将其中的每一行存储到 mysql 中我的表的一行中。我应该提一下,每一行的字符串都以逗号(“,”)作为分隔符。

假设我有以下文本:

title1,name1,url1,number1

title2,name2,url2,number2

title3,name3,url3,number3

我不确定是否需要使用

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

分解多行文本,因为它会给我一个行数组,我不知道如何将每一行拆分为单独的字符串变量并将它们插入到表格行中。

任何帮助将不胜感激。

【问题讨论】:

  • 首先分解成行。然后爆发成价值观。然后插入到表格行的每个字段中。
  • 这看起来像csv,这是csv数据吗?
  • 我可以使用explode创建一个多维字符串数组吗?假设第一个元素表示行,第二个表示单词?
  • 你试过了吗?你有什么错误吗??
  • 这不是 csv 数据,但如果有帮助,我可以将其保存为 csv。

标签: php mysql explode multilinestring


【解决方案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);
}

【讨论】:

  • 我还添加了 mysql 命令以防万一你还不知道
  • 为每个值添加一个trim(),以确保您涵盖以下情况:"title1, name1,url1, number1"。文本中的索引和使用的变量的映射也很有用,以便更容易地维护扩展脚本。喜欢$mapping = array(0 => 'title', 1 => 'name', ...)。然后你遍历这个数组,检查设置索引并设置$data['title'] = $value[0]。如果找不到,只需将其设置为NULL
  • 关于映射,是的,这是一个很好的做法,与 VALUES 部分中的 implode() 配对,但操作员没有要求它,所以不应该再添加它初学者OP难以理解的事情。我添加了你建议的修剪。
  • 是的,但正如你所说:他/她是初学者,所以他/她应该尽快接触最佳实践,以免坏习惯在他/她的脑海中燃烧^^至少应该知道这些事情。
猜你喜欢
  • 2021-06-13
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2014-02-25
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
相关资源
最近更新 更多