2017-10-18 29 views
0

我希望有人知道这是怎么回事。我从来没有见过这样的事情。我试图使用结果中的'code'的值将索引数组的结果重新键入到键控数组中,因为它是唯一键。这发生在两个PHP 5.4.16和PHP 7.0.10使用PDO获取时的意外输出

下面的代码非常奇怪的输出:

$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值被切断后,$ row ['code']被打印到STDOUT。这导致我的重新键入数组($ rows)没有键值。我之前从数据库结果中重新键入了数组,并且在我开始使用PDO之前从未遇到任何问题。任何人有任何想法?

我简化通过发出报价:

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

这就造成:

'alue of EmployeeCode is '1286 

我困惑为什么它切断了 'V' 的价值。

+0

尝试从下一行删除括号。 '$ rows [$ row ['code']] = $ row;'。不知道它是否会有所作为,但语法很奇怪。 – aynber

+0

是的,我已经尝试过,没有parens。同样的结果。但是,谢谢你。 –

+0

'print“$ key的值是”。 “{$ row ['code']}”。 “\ n”;' - 给那个旋转。单引号内的连接关闭和'\ n'也是一个问题。 @ToddHammer –

回答

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'字符的'实际上是您正在打印的单引号的第二个

同样,在print_r的怪输出()时,\r跳着输出光标到行的开始,所以] => Array被覆盖前什么来,这是[1286\r

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

+0

谢谢Bill!我习惯于信任我自己的数据库记录,我从来没有想过在数据中存储值之后会有一个换行符。你修好了!再次感谢! –