使用PDO Fetch时出现意外输出

时间:2017-10-18 15:08:16

标签: php mysql pdo

我希望有人知道这是怎么回事。我以前从未见过这样的事。我正在尝试使用结果中的'code'值将索引数组的结果重新键入键控数组,因为它是唯一键。这在PHP 5.4.16和PHP 7.0.10中都会发生

以下代码会产生非常奇怪的输出:

$stmt = $conn->prepare( $sql );
$stmt->execute( $params );

$key = 'code';

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    print "Value of $key is '{$row['code']}'\n";
    $rows[ ($row['code']) ] = $row;
}

这会产生以下输出:

'alue of code is '1286
] => Array
    (
        [code] => 1286
        [EmployeeID] =>
        [Name] =>
    )

注意在单引号和V in Value被切断后,$ row ['code']的值如何打印到STDOUT。这导致我的重新键控数组($ rows)没有键值。我之前已经数千次从数据库结果中重新键入数组,直到我开始使用PDO时才出现问题。有人有什么想法吗?

我通过发出以下内容简化了引用:

print "Value of $key is '"."{$row[$key]}"."'\n";

导致:

'alue of EmployeeCode is '1286

我很困惑为什么它会切断价值中的'V'。

1 个答案:

答案 0 :(得分:2)

我可以在不使用任何数据库调用的情况下获得类似的输出:

$row = [
        'code' => "1286\r",
        'EmployeeID' => '',
        'Name' => ''
    ];

print "Value of $key is '{$row['code']}'\n";
$rows[ ($row['code']) ] = $row;
print_r($rows);

输出:

'alue of  is '1286
Array
(
] => Array
        (
            [code] => 1286
            [EmployeeID] => 
            [Name] => 
        )

)

\r字符会导致输出光标跳到行的开头,因此覆盖'V'字符的'实际上是 second 单个 - 引用你的印刷品。

同样,在print_r()的奇怪输出中,\r将输出光标跳到行的开头,因此] => Array将覆盖之前的内容,即[1286\r 1}}。

我怀疑数据库中的数据包含文字\r字符。