在MySQL中存储\r\n并通过PHP检索和写入文本文件

在MySQL中存储\r\n并通过PHP检索和写入文本文件,php,sql,carriage-return,Php,Sql,Carriage Return,我有一个数据集,需要通过CSV导入到应用程序中。我遇到的问题是程序用来表示新行的\r\n字符没有被导出 MySQL识别它们在数据库中,但PHP似乎无法将它们导出到文本文件中,而是执行它们。有人能给我指一下正确的方向吗?我有点迷路了 变量: $elec_desc = "Value Used " . $row['item_no'] . " From " . date('d-m-Y', strtotime($readings[3])) . " to " . date('d-m-Y', strtotim

我有一个数据集,需要通过CSV导入到应用程序中。我遇到的问题是程序用来表示新行的\r\n字符没有被导出

MySQL识别它们在数据库中,但PHP似乎无法将它们导出到文本文件中,而是执行它们。有人能给我指一下正确的方向吗?我有点迷路了

变量:

$elec_desc = "Value Used " . $row['item_no'] . " From " . date('d-m-Y', strtotime($readings[3])) . " to " . date('d-m-Y', strtotime($readings[1])) . '\\r\\n' . "Prev Reading " . $readings[2] . " QTY Type    New Reading " . $readings[0] . " QTY Type " . '\\r\\n' . "Total Usage " . $totalused . " QTY Type " . '\\r\\n' . "Price per QTY Type \$$usagefee";
在这一点上没有使用准备好的语句,我计划在一切正常后修改

出口:

        if ($res[$price] != 0.00){
            $string_to_push = $res['inv_no'] . "," . $res['inv_date'] . "," . $sres['name'] . "," . $res[$acc] . "," . $res[$desc] . "," . $res[$gst] . "," . round((($res[$price]/11)*10),2) . "," . round(($res[$price]/11),2) . ",E";
            array_push($array_of_invs, $string_to_push);

        } else {
            $i = 11;
        }
    }
}

$prevsub = "IV000000";

for($inc=0;$inc<sizeof($array_of_invs);$inc++){
    $file_name = $curr_date . "_inv_export.txt";
    $string = $array_of_invs[$inc];

    if ($prevsub == substr($string,0,8)){
        $myfile = file_put_contents($file_name, $string.PHP_EOL , FILE_APPEND | LOCK_EX);
    } else {
        $myfile = file_put_contents($file_name, PHP_EOL, FILE_APPEND | LOCK_EX);
        $myfile = file_put_contents($file_name, ($string.PHP_EOL) , FILE_APPEND | LOCK_EX);
    }

    $prevsub = substr($string,0,8);
}
if($res[$price]!=0.00){
$string_to_push=$res['inv_no'.],“$res['inv_date'.]”,“$sres['name'.]”,“$res[$acc]”,“$res[$desc]”,“$res[$gst]”,“.round($res[$price]/11)*10),“,”,“.round($res price[$price]/11),2),“.E.”;
数组推送($array\u of\u invs,$string\u to\u push);
}否则{
$i=11;
}
}
}
$prevsub=“IV000000”;

对于($inc=0;$inc来说,解决方案似乎足够简单。只对它们进行一次转义是不够的,因为它们包含在一个变量中,答案是对它们进行两次转义。我从未想过要这样做,因为我认为在中添加第三个斜杠只会执行它们

 \\\r\\\n 

^似乎做到了这一点,因为它们在MySQL中正确存储并正确导出。

请发布PHP代码和原始字符串的示例,以及PHP正在生成的错误输出示例。您所说的“它执行它们”是什么意思?如果您存储的是实际的转义序列,它们将不会由PHP执行。它只识别文本中的转义序列。我怀疑您在数据库中存储的是CR和LF字符,而不是转义序列。请记住,MySQL在插入时将其解析为转义序列,它不会按字面意义保存。您需要重新编写te
“\\r\\n”
插入时按字面意思存储它们。@Barmar我将它们写成\\r\\n。它在MySQL中可以很好地存储它们。生成导出文本文件时,它实际上会在文本文件中创建新行,而不是显示回车符。您需要显示代码,以便我们可以看到这是如何发生的。我认为真正的问题是存储到数据库时,您没有使用
mysqli\u real\u escape\u string()
或准备好的语句。