首页 > 社区问答列表 >在使用PHP从PostgreSQL数据库获取数据时缺少换行符

  在使用PHP从PostgreSQL数据库获取数据时缺少换行符

标题:使用PHP从PostgreSQL数据库获取数据时缺少换行符
正文:
我在使用PHP从PostgreSQL数据库获取数据时遇到了一个问题。我使用Navicat来查看我的数据库中的数据,它清楚地显示了数据中的换行符(n),如下所示:

addr=1
addr=2
addr=3
addr=4
addr=5
addr=6
j=6
[rs485] comid=1
comid=1
[rs485] baudrate=115200
bdrate=115200
...

然而,当我使用PHP获取这些数据时,换行符似乎丢失了。以下是我用于获取数据的PHP代码:

$host = '192.168.1.92';
$db   = 'GneMaster';
$user = 'postgres';
$pass = '123456';

$dsn = "pgsql:host=$host;port=5432;dbname=$db;options='--client_encoding=UTF8'";
$opt = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_STRINGIFY_FETCHES => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);

$id = '648c0d5dae53ac34094ede6d';

$sql = "SELECT responsecontent FROM stationcmd WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_STR);
$stmt->execute();

while ($row = $stmt->fetch())
{
    echo "Checking for line breaks: n";

    $CRLFPos = strpos($row['responsecontent'], "rn");
    $LFPos = strpos($row['responsecontent'], "n");
    $CRPos = strpos($row['responsecontent'], "r");

    if ($CRLFPos !== false) {
        echo "CRLF found at position: " . $CRLFPos . "n";
    }
    if ($LFPos !== false) {
        echo "LF found at position: " . $LFPos . "n";
    }
    if ($CRPos !== false) {
        echo "CR found at position: " . $CRPos . "n";
    }
    if ($CRLFPos === false && $LFPos === false && $CRPos === false) {
        echo "No line breaks found in responsecontentn";
    }
}

这个PHP脚本的输出不包含任何换行符,如下所示:

addr=1addr=2addr=3addr=4addr=5addr=6j=6[rs485] comid=1comid=1[rs485] baudrate=115200bdrate=115200...

为什么我使用PHP获取数据时会丢失换行符,我该如何保留它们?

我希望在使用PHP从PostgreSQL数据库获取数据时能够保留原始的换行符,就像在Navicat中看到的一样。据我了解,当我从数据库中获取一个字符串时,它应该保留所有字符,包括换行符。

我尝试的方法是直接从数据库获取数据并输出它。然而,结果输出中没有包含任何换行符。我还尝试在PHP中查找换行符(n、r、rn),但在我的数据中没有找到这些字符。

我期望的结果是,当我使用PHP获取和输出数据时,它看起来与在Navicat中一样,即数据应该包含换行符。然而,实际结果是我收到的数据不包含换行符。

我也查阅了一些关于PHP和PostgreSQL的文档,但没有找到与此问题相关的信息。我在Stack Overflow和其他相关论坛上进行了搜索,但没有找到类似的问题或解决方案。

我正在寻找一种在PHP中获取数据时保留原始换行符的方法。我对PHP和PostgreSQL有一些了解,但还没有找到解决这个问题的方法。我希望有人能帮助我解决这个问题。


P粉696146205
P粉696146205

  • P粉309989673
  • P粉309989673   采纳为最佳   2023-08-07 09:27:46 1楼

    对于造成的混淆我感到抱歉。我提供的PHP代码连接到了位于192.168.1.92的PostgreSQL数据库,但我在Navicat中查看的数据库位于192.168.1.93。位于192.168.1.93的数据库包含换行符,而位于192.168.1.92的数据库则不包含。这种差异导致了我遇到的问题。对于造成的任何混淆,我深感抱歉。

    +0 添加回复