我希望有人知道这是怎么回事。我以前从未见过这样的事。我正在尝试使用结果中的'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'。
答案 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
字符。