[PDO + Oracle] : Problème de taille de donnée
Posté : 08 nov. 2011, 11:58
Bonjour,
J'ai un problème avec l'utilisation de PDO et de oracle 11g (d'après ce que j'ai pu voir c'est pas forcément lié à oracle mais bon).
j'effectue un bête select
jusque la pas de soucis, ou presque j'ai ce message d'erreur sur le fetchAll()
)
Je ne comprends pas ce message d'erreur sachant que je l'ai deux fois sur 15 tuple et pas toujours sur la même colonne
message total
exemple de donnée
B001 Bande magnétique 1200 87 20 unit <= manque le é
B002 Bande magnétique 6250 12 20 unit <= idem
D035 CD R slim 80 mm 42 40 B010
D050 CD R-W 80mm 4 50 B010
P240 Pré-imprimé bulletin pa 3000 500 B500 <= manque deux caractères pour paie
P250 Pré-imprimé bon livrais 2500 500 B500 <= manque deux caractères pour livraison
P270 Pré-imprimé fabrication 2500 500 B500
Je suis tombé la dessus https://bugs.php.net/bug.php?id=35003&edit=1 qui semble dire qu'il s'agit la d'un bug non résolus, mais heu je n'arrive pas a tout suivre.
D'autre site parle de renommage de colonne (les miennes ne font que 6 caractères max) bref j'ai pas trop pigé d'où cela peux venir.
Je viens de voir que sur deux lignes le résultat est effectivement tronqué à 24 caractères dans la 2ème colonne (donc la 1 si l'on par de zéro) soit les deux dernier messages d'erreur.
les deux premières lignes les é sont virés et ce n'est pas un problème de longueur de données, car "unité" on vire le é et "unite" est fournit complet.
je précise que j'indique le charset utf8 lors de la connexion (dns = 'oci:dbname=//localhost/instance;charset=UTF8').
Je ne sais pas si cela peux venir de la, une ou deux page en parle, et pour être je ne sais pas comment oracle gère cela j'ai pas encore regardé.
j'ai quand même des données avec des accents qui s'affichent sans problème (dernière de l'exemple ci dessus) ....
Ma question est donc : Est ce que quelqu'un a déjà eu ce type de de problème et comme l'a t'il résolu
D'ailleurs au passage, est ce que quelqu'un sais comment forcer oracle à filer des noms de colonnes en minuscule (parce que j'aime pas le upper case forcé na
).
voila c'est tout pour le moment, merci de votre patience
@+
J'ai un problème avec l'utilisation de PDO et de oracle 11g (d'après ce que j'ai pu voir c'est pas forcément lié à oracle mais bon).
j'effectue un bête select
<?php
public final function listprod(){
$sql = 'SELECT codart, libart, stkphy,stkale, unimes from produit order by codart';
try {
$result = $this->pdo->query($sql);
if ($result !== false){
$r = $result->fetchALL(PDO::FETCH_OBJ);
$result->closeCursor();
}
return $r;
}
catch (Exception $e) {
throw new Exception ($e->getMessage());
}
}
?>
la classe contient bien en privée une variable nommé PDO qui est une instance de la classe PDO. jusque la pas de soucis, ou presque j'ai ce message d'erreur sur le fetchAll()
Par conte la suite est l'affichage et lui m'affiche toute les infos (et les bonnes heinWarning: PDOStatement::fetchAll() [pdostatement.fetchall]: column 4 data was too large for buffer and was truncated to fit it in C:\xampp\htdocs\papyrus\classes\commande.class.php on line 60
Je ne comprends pas ce message d'erreur sachant que je l'ai deux fois sur 15 tuple et pas toujours sur la même colonne
message total
docn 4 messages d'erreurs sur la même ligne (le fetchAll()).Warning: PDOStatement::fetchAll() [pdostatement.fetchall]: column 4 data was too large for buffer and was truncated to fit it in C:\xampp\htdocs\papyrus\classes\commande.class.php on line 60
Warning: PDOStatement::fetchAll() [pdostatement.fetchall]: column 4 data was too large for buffer and was truncated to fit it in C:\xampp\htdocs\papyrus\classes\commande.class.php on line 60
Warning: PDOStatement::fetchAll() [pdostatement.fetchall]: column 1 data was too large for buffer and was truncated to fit it in C:\xampp\htdocs\papyrus\classes\commande.class.php on line 60
Warning: PDOStatement::fetchAll() [pdostatement.fetchall]: column 1 data was too large for buffer and was truncated to fit it in C:\xampp\htdocs\papyrus\classes\commande.class.php on line 60
exemple de donnée
B001 Bande magnétique 1200 87 20 unit <= manque le é
B002 Bande magnétique 6250 12 20 unit <= idem
D035 CD R slim 80 mm 42 40 B010
D050 CD R-W 80mm 4 50 B010
P240 Pré-imprimé bulletin pa 3000 500 B500 <= manque deux caractères pour paie
P250 Pré-imprimé bon livrais 2500 500 B500 <= manque deux caractères pour livraison
P270 Pré-imprimé fabrication 2500 500 B500
Je suis tombé la dessus https://bugs.php.net/bug.php?id=35003&edit=1 qui semble dire qu'il s'agit la d'un bug non résolus, mais heu je n'arrive pas a tout suivre.
D'autre site parle de renommage de colonne (les miennes ne font que 6 caractères max) bref j'ai pas trop pigé d'où cela peux venir.
Je viens de voir que sur deux lignes le résultat est effectivement tronqué à 24 caractères dans la 2ème colonne (donc la 1 si l'on par de zéro) soit les deux dernier messages d'erreur.
les deux premières lignes les é sont virés et ce n'est pas un problème de longueur de données, car "unité" on vire le é et "unite" est fournit complet.
je précise que j'indique le charset utf8 lors de la connexion (dns = 'oci:dbname=//localhost/instance;charset=UTF8').
Je ne sais pas si cela peux venir de la, une ou deux page en parle, et pour être je ne sais pas comment oracle gère cela j'ai pas encore regardé.
j'ai quand même des données avec des accents qui s'affichent sans problème (dernière de l'exemple ci dessus) ....
Ma question est donc : Est ce que quelqu'un a déjà eu ce type de de problème et comme l'a t'il résolu
D'ailleurs au passage, est ce que quelqu'un sais comment forcer oracle à filer des noms de colonnes en minuscule (parce que j'aime pas le upper case forcé na
voila c'est tout pour le moment, merci de votre patience
@+