Bonjour,
Ceci est mon premier post sur ce site, pardon d'avance si certaines règles d'édition ne sont pas respectées.
Je réalise actuellement un intranet pour mon entreprise. D'un côté, le site est stocké sur un serveur Debian et, d'un autre côté, j'ai ma base de données HFSQL qui est stockée sur notre second serveur, un Windows 8. Actuellement, nos techniciens, commerciaux, etc. utilisent l'ERP CODIAL pour alimenter cette base de données. J'ai donc développé en plus de l'intranet une API PHP qui est également hébergée sur le serveur Windows (le même que pour la BD). Jusqu'à présent, cette API est parfaitement capable de me transmettre les données vers l'intranet. Problème : impossible d'afficher les données provenant de champs "memo text" (LONG VARCHAR pour PHP) dans ma base de données.
J'ai pu faire quelques tests, la requête permettant de lire ces champs uniquement fonctionne très bien en amont, depuis l'éditeur HFSQL. Un petit appel de la fonction var_dump() m'indique bien que l'intitulé du champ est récupéré, mais pas son contenu qui est remplacé par NULL, voire rien du tout avec un echo.
J'ai synthétisé la partie concernée de mon code :
Et voici le résultat affiché :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 <?php // Ouverture de la connexion à la BD function connectDb() { $dsn = "DRIVER={HFSQL};Server Name=" . DB_HOST . ";Server Port=4900;Database=" . DB_NAME . ";"; $database = odbc_connect($dsn, DB_USER, DB_PASS) or die(odbc_error()); return $database; } $database = connectDb(); $Table = array(); // Mon tableau de sortie $query = "SELECT REFERENCE, DESIGN, NUMSERIE, DATEFING FROM MA_TABLE WHERE monId LIKE '1'"; // Cette portion de code a été trouvée et adaptée ici (https://www.developpez.net/forums/d747184/php/php-sgbd/php-odbc/recuperation-base-acces-php-champ-memo/) $valeur = odbc_exec($database, $query); $result = odbc_do($database, $query); $collone = odbc_num_fields($valeur); // Le nombre de champs de la requête exécutée $Collone = array(); for($i = 1; $i < $collone + 1; $i++) $Collone[$i] = odbc_field_name($result, $i); while(odbc_fetch_row($result)) { $Ligne = array(); // Ici commencent les ennuis... for($i = 1; $i < $collone + 1; $i++) { $tmp = odbc_result($result, $i); if($tmp) $data = $tmp; else $data = "NULL"; $Ligne[$Collone[$i]] = $data; } $Table[] = $Ligne; } odbc_close($database); var_dump($Table); ?>
Suivant les fonctions que j'utilise pour lire le contenu, j'obtiens l'erreur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 array(1) { [0]=> array(25) { ["REFERENCE"]=> string(8) "AZERTY" ["DESIGN"]=> string(4) "NULL" <-- Ce champ devrait contenir un long texte ["NUMSERIE"]=> string(10) "1234-1234-1234-1234" ["DATEFING"]=> string(8) "13/04/2018" } }
... que je ne comprends pas, étant donné que dans mon cas, "A" est supérieur à "B". Hors, le message dit bien "pas assez de mémoire (A allouée) (essayez d'allouer B bytes) in [...]. J'ai modifié mon php.ini (variable memory_limit) mais rien ne semble fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Fatal error: Out of memory (allocated A) (tried to allocate B bytes) in [...]
Tout ce que j'ai pu trouver à droite à gauche sur internet, y compris ici n'a pas fonctionné. C'est à n'y rien comprendre.
Une idée ? Merci d'avance.
Partager