在使用PHP从PostgreSQL数据库获取数据时缺少换行符
P粉696146205
2023-08-06 13:44:42
<p>标题:使用PHP从PostgreSQL数据库获取数据时缺少换行符<br />正文:<br />我在使用PHP从PostgreSQL数据库获取数据时遇到了一个问题。我使用Navicat来查看我的数据库中的数据,它清楚地显示了数据中的换行符(n),如下所示:</p><p><code></code></p>
<pre class="brush:php;toolbar:false;">addr=1
addr=2
addr=3
addr=4
addr=5
addr=6
j=6
[rs485] comid=1
comid=1
[rs485] baudrate=115200
bdrate=115200
...</pre>
<p>然而,当我使用PHP获取这些数据时,换行符似乎丢失了。以下是我用于获取数据的PHP代码:</p>
<pre class="lang-php prettyprint-override"><code>$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";
}
}
</code></pre>
<p>这个PHP脚本的输出不包含任何换行符,如下所示:</p>
<pre class="brush:php;toolbar:false;">addr=1addr=2addr=3addr=4addr=5addr=6j=6[rs485] comid=1comid=1[rs485] baudrate=115200bdrate=115200...</pre>
<p>为什么我使用PHP获取数据时会丢失换行符,我该如何保留它们?<br /><br />我希望在使用PHP从PostgreSQL数据库获取数据时能够保留原始的换行符,就像在Navicat中看到的一样。据我了解,当我从数据库中获取一个字符串时,它应该保留所有字符,包括换行符。<br /><br />我尝试的方法是直接从数据库获取数据并输出它。然而,结果输出中没有包含任何换行符。我还尝试在PHP中查找换行符(n、r、rn),但在我的数据中没有找到这些字符。<br /><br />我期望的结果是,当我使用PHP获取和输出数据时,它看起来与在Navicat中一样,即数据应该包含换行符。然而,实际结果是我收到的数据不包含换行符。<br /><br />我也查阅了一些关于PHP和PostgreSQL的文档,但没有找到与此问题相关的信息。我在Stack Overflow和其他相关论坛上进行了搜索,但没有找到类似的问题或解决方案。<br /><br />我正在寻找一种在PHP中获取数据时保留原始换行符的方法。我对PHP和PostgreSQL有一些了解,但还没有找到解决这个问题的方法。我希望有人能帮助我解决这个问题。</p><p><br /></p>
对于造成的混淆我感到抱歉。我提供的PHP代码连接到了位于192.168.1.92的PostgreSQL数据库,但我在Navicat中查看的数据库位于192.168.1.93。位于192.168.1.93的数据库包含换行符,而位于192.168.1.92的数据库则不包含。这种差异导致了我遇到的问题。对于造成的任何混淆,我深感抱歉。