2017-10-18 14 views
0

J'espère que quelqu'un sait ce qui se passe avec ça. Je n'ai jamais rien vu de tel auparavant. J'essaye de re-key les résultats d'un tableau indexé à un tableau claveté en utilisant la valeur de 'code' dans les résultats car c'est une clé unique. Cela se produit à la fois PHP 5.4.16 et PHP 7.0.10Sortie inattendue lors de l'utilisation de PDO Fetch

Le code suivant produit une sortie très étrange:

$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; 
} 

Ceci produit la sortie suivante:

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

Remarquez que la valeur de $ row ['code'] est imprimé sur STDOUT après les guillemets simples et la valeur V in est coupée. Cela provoque mon tableau re-keyed ($ rows) pour n'avoir aucune valeur de clé. J'ai réencodé des tableaux à partir des résultats de la base de données des milliers de fois auparavant et je n'ai jamais eu de problème jusqu'à ce que j'ai commencé à utiliser PDO. Quelqu'un a des idées?

I simplifié la citation par l'émission:

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

qui a abouti à:

'alue of EmployeeCode is '1286 

Je suis mystifié pourquoi il est de couper le 'V' de la valeur.

+0

Essayez de supprimer les parenthèses de la ligne suivante. '$ rows [$ row ['code']] = $ row;'. Je ne sais pas si cela fera une différence, mais la syntaxe est étrange. – aynber

+0

Oui, je l'ai essayé avec et sans les parens. Même résultat Mais merci tho. –

+0

'print" La valeur de $ key est ". "{$ row ['code']}". "\ n"; '- Donne un tourbillon. La concaténation est désactivée et '\ n' à l'intérieur des guillemets simples est également un problème ici. @ToddHammer –

Répondre

2

Je peux obtenir une sortie similaire sans utiliser une base de données appelle cette façon:

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

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

Sortie:

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

) 

Le caractère \r provoque le curseur de sortie pour passer au début de la ligne, donc le ' qui remplace votre caractère 'V' est en fait le deuxième seul devis que vous imprimez.

De même, dans la sortie étrange de print_r(), le \r saute le curseur de la sortie au début de la ligne, de sorte que le ] => Array est ce qui a précédé un écrasement, ce qui était [1286\r.

Je suppose que les données de votre base de données contiennent des caractères littéraux \r.

+0

Merci Bill! Je suis tellement habitué à faire confiance à mes propres bases de données qu'il ne m'est jamais venu à l'esprit de penser qu'il y a un caractère de retour à la ligne après la valeur stockée dans les données. Tu l'as réparé! Merci encore! –