3 votes

php odbc_exec ne fonctionne pas si je ne fais pas d'écho avant ?

J'essaie d'interroger un fichier MDB Access à l'aide de php odbc_connect et odbc_exec. L'idée est de retourner un tableau que je peux ensuite traduire en json.

J'utilise php via apache2 sur Ubuntu 12.10.

Voici mon code :

//Connect to the database
$conn=odbc_connect('stock-test','','');

//die if error
if (!$conn) {
    die("Connection Failed: " . $conn);
} 
//SQL query
$sql = "SELECT * FROM Stk_Items";

//This is the print command...see notes below for this
//print " "

//Execute SQL query
$rs=odbc_exec($conn,$sql);

//If no result, there is an error in the SQL
if (!$rs) {
    exit("Error in SQL");
}

//Create an array to contain the results...
$arr = array();

//Loop through the results, pushing each array to the $arr array
while ($row = odbc_fetch_array($rs)) {
    array_push($arr, $row);
}

print json_encode( $arr);

odbc_close($conn);

Maintenant, voici la chose étrange. Ce code ne produira le json que si j'imprime un espace blanc (ou tout autre caractère) avant que la commande odbc_exec ne soit émise (j'ai commenté la commande dans le code ci-dessus).

J'ai également effectué plusieurs autres tests (en faisant écho aux résultats, etc.) mais aucun ne fonctionne à moins d'imprimer un espace vide avant la commande odbc_exec.

Est-ce que je rate quelque chose d'évident ?

2voto

solo1977 Points 157

J'ai configuré une machine virtuelle et réinstallé à partir de zéro pour voir si le problème existait à nouveau sur la nouvelle version. Ce n'était pas le cas, ce qui m'a amené à penser qu'il y avait un problème avec la version d'Apache sur la machine active. Au cours des derniers jours, j'ai supprimé et ajouté Apache via les dépôts et ajouté toutes les dernières mises à jour via apt-get et le problème semble maintenant résolu - très frustré car les dernières mises à jour sont normalement appliquées, donc je ne peux qu'imaginer que quelque chose a dû mal se passer avec l'installation initiale d'apache2 ou de php5-odbc.

0voto

Gord Thompson Points 30178

Ce que vous décrivez me semble être une bizarrerie d'Apache. Si vous utilisez un navigateur web pour déclencher le script de PHP et inspecter les résultats, alors vous devriez vraiment afficher au moins <html><body> avant toute autre chose. Si vous voulez voir les résultats dans une forme raisonnablement non-molestée, vous devriez faire un écho à la commande <pre> aussi.

Pour info, j'ai exécuté votre code tel quel à partir de la ligne de commande et il a bien fonctionné pour moi.

Edit :

Suite aux commentaires ci-dessous, cela ressemble effectivement à une bizarrerie lorsque apache2 invoque un script PHP qui utilise odbc_exec() . Pour tester, j'ai créé la "page" suivante sur mon serveur Ubuntu 12.04 LAMP...

<?php
$arr = array(
    array('ID' => 1, 'text' => 'foo'), 
    array('ID' => 2, 'text' => 'bar'), 
    array('ID' => 3, 'text' => 'baz')
    );
print json_encode($arr);

...et Firefox affiche bien la chaîne JSON comme suit...

[{"ID":1,"text":"foo"},{"ID":2,"text":"bar"},{"ID":3,"text":"baz"}]

...donc apache2 n'a aucun problème pour cracher une simple chaîne JSON et Firefox n'a aucun problème pour l'afficher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X