Je suis sous la mandrake 10, j'ai installé apache, php, freetds et
unixodbc pour pouvoir accéder à une base sql server 7 sur windows.
La connexion s'effectue bien. J'utilise odbc car cela est une exigence
de ma boite.
Mon soucis est lorsque j'execute plusieurs odbc_exec(), le premier
passe mais pas le second.
Voici un exemple :
<?
$dbc = odbc_connect("DSN", "user", "pass");
=> le probleme est qu'il y a une erreur sur le 2 eme odbc_exec().
J'ai essayer de mettre odbc_free_result($rs) mais dans ce cas je ne
pourrait plus utiliser le premier resultset ce que je ne souhaite pas.
Si qq'un a une solution elle est la bienvenue.
Merci en esperant que le probleme a ete compris.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
John Gallet
Bonjour,
Followup-To: fr.comp.lang.php Déjà je repositionne correctement le champ en question. Je rappelle au
passage que fr.comp.lang.php est modéré, donc vous ne verrez pas instantanément apparaitre votre réponse, même sur fcas si vous laissez le xpost. On a fini par publier l'article en l'état.
Je suis sous la mandrake 10, j'ai installé apache, php, freetds et unixodbc pour pouvoir accéder à une base sql server 7 sur windows. La connexion s'effectue bien. J'utilise odbc car cela est une exigence de ma boite.
Donc sauf erreur de ma part, freetds ne sert donc à rien, vu qu'il permet l'accès natif à sybase et sqlserver. Je ne ferai pas de commentaires sur la décision de forcer l'usage d'odbc car je ne connais aps les tenants et les aboutissants ni du projet, ni de ses contraintes.
On a deux requêtes sur un même descripteur. Je ne sais pas si odbc ou son implémentation unixienne accepte ceci.
Deux tests à faire :
1) commencer par "manger" en boucle while tous les rangs retournés par le premier select avant de faire le deuxième select. Si ça marche, c'est donc qu'on ne peut pas avoir deux result sets associés au même descripteur de connexion.
2) inverser les deux requêtes, il y a peut-être une erreur bête sur la seconde requête, j'y crois moins vu que tu nous indique que faire un free_result débloque la situation.
Il n'y aurait pas moyen de faire une seule requête, en jointure ou en union ?
a++; JG
Bonjour,
Followup-To: fr.comp.lang.php
Déjà je repositionne correctement le champ en question. Je rappelle au
passage que fr.comp.lang.php est modéré, donc vous ne verrez pas
instantanément apparaitre votre réponse, même sur fcas si vous laissez
le xpost. On a fini par publier l'article en l'état.
Je suis sous la mandrake 10, j'ai installé apache, php, freetds et
unixodbc pour pouvoir accéder à une base sql server 7 sur windows.
La connexion s'effectue bien. J'utilise odbc car cela est une exigence
de ma boite.
Donc sauf erreur de ma part, freetds ne sert donc à rien, vu qu'il
permet l'accès natif à sybase et sqlserver. Je ne ferai pas de
commentaires sur la décision de forcer l'usage d'odbc car je ne connais
aps les tenants et les aboutissants ni du projet, ni de ses contraintes.
On a deux requêtes sur un même descripteur. Je ne sais pas si odbc ou
son implémentation unixienne accepte ceci.
Deux tests à faire :
1) commencer par "manger" en boucle while tous les rangs retournés par
le premier select avant de faire le deuxième select. Si ça marche, c'est
donc qu'on ne peut pas avoir deux result sets associés au même
descripteur de connexion.
2) inverser les deux requêtes, il y a peut-être une erreur bête sur la
seconde requête, j'y crois moins vu que tu nous indique que faire un
free_result débloque la situation.
Il n'y aurait pas moyen de faire une seule requête, en jointure ou en
union ?
Followup-To: fr.comp.lang.php Déjà je repositionne correctement le champ en question. Je rappelle au
passage que fr.comp.lang.php est modéré, donc vous ne verrez pas instantanément apparaitre votre réponse, même sur fcas si vous laissez le xpost. On a fini par publier l'article en l'état.
Je suis sous la mandrake 10, j'ai installé apache, php, freetds et unixodbc pour pouvoir accéder à une base sql server 7 sur windows. La connexion s'effectue bien. J'utilise odbc car cela est une exigence de ma boite.
Donc sauf erreur de ma part, freetds ne sert donc à rien, vu qu'il permet l'accès natif à sybase et sqlserver. Je ne ferai pas de commentaires sur la décision de forcer l'usage d'odbc car je ne connais aps les tenants et les aboutissants ni du projet, ni de ses contraintes.
On a deux requêtes sur un même descripteur. Je ne sais pas si odbc ou son implémentation unixienne accepte ceci.
Deux tests à faire :
1) commencer par "manger" en boucle while tous les rangs retournés par le premier select avant de faire le deuxième select. Si ça marche, c'est donc qu'on ne peut pas avoir deux result sets associés au même descripteur de connexion.
2) inverser les deux requêtes, il y a peut-être une erreur bête sur la seconde requête, j'y crois moins vu que tu nous indique que faire un free_result débloque la situation.
Il n'y aurait pas moyen de faire une seule requête, en jointure ou en union ?
a++; JG
alessandra_morgane
Je suis sous la mandrake 10, j'ai installé apache, php, freetds et unixodbc pour pouvoir accéder à une base sql server 7 sur windows. La connexion s'effectue bien. J'utilise odbc car cela est une exigence de ma boite.
Donc sauf erreur de ma part, freetds ne sert donc à rien, vu qu'il permet l'accès natif à sybase et sqlserver. Je ne ferai pas de commentaires sur la décision de forcer l'usage d'odbc car je ne connais aps les tenants et les aboutissants ni du projet, ni de ses contraintes.
On a deux requêtes sur un même descripteur. Je ne sais pas si odbc ou son implémentation unixienne accepte ceci.
et bien ce qui me parait bizzare c que sur une plateforme windows/apache/php/odbc/sqlserver tout fonctionne correctement. J'ai chercher au niveau constante php, et odbc mais je n'ai pas trouve grand chose a part peut etre une histoire de constante : SQL_CURSOR_TYPE mais je ne trouve rien de tres signifiant sur google :(
Deux tests à faire :
1) commencer par "manger" en boucle while tous les rangs retournés par le premier select avant de faire le deuxième select. Si ça marche, c'est donc qu'on ne peut pas avoir deux result sets associés au même descripteur de connexion.
deja tester et cela me donne la meme erreur.
2) inverser les deux requêtes, il y a peut-être une erreur bête sur la seconde requête, j'y crois moins vu que tu nous indique que faire un free_result débloque la situation.
Il n'y aurait pas moyen de faire une seule requête, en jointure ou en union ?
Ici ce n'est qu'un exemple tout simple mon code est plus complexe et donc je n'ai pas la possibilité de faire une seule requete :(
Merci Amelie
Je suis sous la mandrake 10, j'ai installé apache, php, freetds et
unixodbc pour pouvoir accéder à une base sql server 7 sur windows.
La connexion s'effectue bien. J'utilise odbc car cela est une exigence
de ma boite.
Donc sauf erreur de ma part, freetds ne sert donc à rien, vu qu'il
permet l'accès natif à sybase et sqlserver. Je ne ferai pas de
commentaires sur la décision de forcer l'usage d'odbc car je ne connais
aps les tenants et les aboutissants ni du projet, ni de ses contraintes.
On a deux requêtes sur un même descripteur. Je ne sais pas si odbc ou
son implémentation unixienne accepte ceci.
et bien ce qui me parait bizzare c que sur une plateforme
windows/apache/php/odbc/sqlserver tout fonctionne correctement.
J'ai chercher au niveau constante php, et odbc mais je n'ai pas trouve
grand chose a part peut etre une histoire de constante :
SQL_CURSOR_TYPE mais je ne trouve rien de tres signifiant sur google
:(
Deux tests à faire :
1) commencer par "manger" en boucle while tous les rangs retournés par
le premier select avant de faire le deuxième select. Si ça marche, c'est
donc qu'on ne peut pas avoir deux result sets associés au même
descripteur de connexion.
deja tester et cela me donne la meme erreur.
2) inverser les deux requêtes, il y a peut-être une erreur bête sur la
seconde requête, j'y crois moins vu que tu nous indique que faire un
free_result débloque la situation.
Il n'y aurait pas moyen de faire une seule requête, en jointure ou en
union ?
Ici ce n'est qu'un exemple tout simple mon code est plus complexe et
donc je n'ai pas la possibilité de faire une seule requete :(
Je suis sous la mandrake 10, j'ai installé apache, php, freetds et unixodbc pour pouvoir accéder à une base sql server 7 sur windows. La connexion s'effectue bien. J'utilise odbc car cela est une exigence de ma boite.
Donc sauf erreur de ma part, freetds ne sert donc à rien, vu qu'il permet l'accès natif à sybase et sqlserver. Je ne ferai pas de commentaires sur la décision de forcer l'usage d'odbc car je ne connais aps les tenants et les aboutissants ni du projet, ni de ses contraintes.
On a deux requêtes sur un même descripteur. Je ne sais pas si odbc ou son implémentation unixienne accepte ceci.
et bien ce qui me parait bizzare c que sur une plateforme windows/apache/php/odbc/sqlserver tout fonctionne correctement. J'ai chercher au niveau constante php, et odbc mais je n'ai pas trouve grand chose a part peut etre une histoire de constante : SQL_CURSOR_TYPE mais je ne trouve rien de tres signifiant sur google :(
Deux tests à faire :
1) commencer par "manger" en boucle while tous les rangs retournés par le premier select avant de faire le deuxième select. Si ça marche, c'est donc qu'on ne peut pas avoir deux result sets associés au même descripteur de connexion.
deja tester et cela me donne la meme erreur.
2) inverser les deux requêtes, il y a peut-être une erreur bête sur la seconde requête, j'y crois moins vu que tu nous indique que faire un free_result débloque la situation.
Il n'y aurait pas moyen de faire une seule requête, en jointure ou en union ?
Ici ce n'est qu'un exemple tout simple mon code est plus complexe et donc je n'ai pas la possibilité de faire une seule requete :(
Merci Amelie
John Gallet
Re,
(miardidiou, le fu2 !!)
et bien ce qui me parait bizzare c que sur une plateforme windows/apache/php/odbc/sqlserver tout fonctionne correctement.
Donc c'est peut-être bien une restriction de la couche odbc unix.
1) commencer par "manger" en boucle while tous les rangs retournés par le premier select avant de faire le deuxième select. deja tester et cela me donne la meme erreur.
Bon.
Ici ce n'est qu'un exemple tout simple mon code est plus complexe et donc je n'ai pas la possibilité de faire une seule requete :(
Mouais. Là je ne vois plus qu'une seule solution si le nombre de connexions n'est pas limité bêtement par un problème de licenses : ouvrir deux connexions. Mais s'il faut ouvrir N connexions sous prétexte qu'on fait N requêtes à la suite, on n'est pas rendus, c'est complètement idiot ce truc.
Est-ce qu'odbc supporte la notion de connexion persistante ? Si oui est-ce que ça apporte une différence ?
Côté projet, est-ce que l'utilisation d'une couche d'abstraction est envisageable (genre adodb par exemple) ? Cas dans lequel on pourrait passer d'un accès natif (freetds) à odbc simplement en changeant un paramètre de config.
a++; JG
Re,
(miardidiou, le fu2 !!)
et bien ce qui me parait bizzare c que sur une plateforme
windows/apache/php/odbc/sqlserver tout fonctionne correctement.
Donc c'est peut-être bien une restriction de la couche odbc unix.
1) commencer par "manger" en boucle while tous les rangs retournés par
le premier select avant de faire le deuxième select.
deja tester et cela me donne la meme erreur.
Bon.
Ici ce n'est qu'un exemple tout simple mon code est plus complexe et
donc je n'ai pas la possibilité de faire une seule requete :(
Mouais.
Là je ne vois plus qu'une seule solution si le nombre de connexions
n'est pas limité bêtement par un problème de licenses : ouvrir deux
connexions. Mais s'il faut ouvrir N connexions sous prétexte qu'on fait
N requêtes à la suite, on n'est pas rendus, c'est complètement idiot ce
truc.
Est-ce qu'odbc supporte la notion de connexion persistante ? Si oui
est-ce que ça apporte une différence ?
Côté projet, est-ce que l'utilisation d'une couche d'abstraction est
envisageable (genre adodb par exemple) ? Cas dans lequel on pourrait
passer d'un accès natif (freetds) à odbc simplement en changeant un
paramètre de config.
et bien ce qui me parait bizzare c que sur une plateforme windows/apache/php/odbc/sqlserver tout fonctionne correctement.
Donc c'est peut-être bien une restriction de la couche odbc unix.
1) commencer par "manger" en boucle while tous les rangs retournés par le premier select avant de faire le deuxième select. deja tester et cela me donne la meme erreur.
Bon.
Ici ce n'est qu'un exemple tout simple mon code est plus complexe et donc je n'ai pas la possibilité de faire une seule requete :(
Mouais. Là je ne vois plus qu'une seule solution si le nombre de connexions n'est pas limité bêtement par un problème de licenses : ouvrir deux connexions. Mais s'il faut ouvrir N connexions sous prétexte qu'on fait N requêtes à la suite, on n'est pas rendus, c'est complètement idiot ce truc.
Est-ce qu'odbc supporte la notion de connexion persistante ? Si oui est-ce que ça apporte une différence ?
Côté projet, est-ce que l'utilisation d'une couche d'abstraction est envisageable (genre adodb par exemple) ? Cas dans lequel on pourrait passer d'un accès natif (freetds) à odbc simplement en changeant un paramètre de config.
a++; JG
alessandra_morgane
Followup-To: fr.comp.lang.php
Re, Re
Est-ce qu'odbc supporte la notion de connexion persistante ? Si oui est-ce que ça apporte une différence ?
oui mais cela ne change rien helas.
Côté projet, est-ce que l'utilisation d'une couche d'abstraction est envisageable (genre adodb par exemple) ? Cas dans lequel on pourrait passer d'un accès natif (freetds) à odbc simplement en changeant un paramètre de config.
je ne connais pas tres bien ADODB mais il me semble que sous linux cela ne fonctionne pas ?
Sinon je pense que cela peut venir du driver donc pour le moment j'essai d'en rechercher un autre. Je vais tester avec iodbc.
merci beaucoup.
Amelie
Followup-To: fr.comp.lang.php
Re, Re
Est-ce qu'odbc supporte la notion de connexion persistante ? Si oui
est-ce que ça apporte une différence ?
oui mais cela ne change rien helas.
Côté projet, est-ce que l'utilisation d'une couche d'abstraction est
envisageable (genre adodb par exemple) ? Cas dans lequel on pourrait
passer d'un accès natif (freetds) à odbc simplement en changeant un
paramètre de config.
je ne connais pas tres bien ADODB mais il me semble que sous linux
cela ne fonctionne pas ?
Sinon je pense que cela peut venir du driver donc pour le moment
j'essai d'en rechercher un autre. Je vais tester avec iodbc.
Est-ce qu'odbc supporte la notion de connexion persistante ? Si oui est-ce que ça apporte une différence ?
oui mais cela ne change rien helas.
Côté projet, est-ce que l'utilisation d'une couche d'abstraction est envisageable (genre adodb par exemple) ? Cas dans lequel on pourrait passer d'un accès natif (freetds) à odbc simplement en changeant un paramètre de config.
je ne connais pas tres bien ADODB mais il me semble que sous linux cela ne fonctionne pas ?
Sinon je pense que cela peut venir du driver donc pour le moment j'essai d'en rechercher un autre. Je vais tester avec iodbc.
merci beaucoup.
Amelie
John Gallet
Re,
oui mais cela ne change rien helas.
Là je suis à court d'idées.
je ne connais pas tres bien ADODB mais il me semble que sous linux cela ne fonctionne pas ? adodb (ou d'autres comm pear::db par exemple) sont des couches
d'abstraction au sgbdr écrites en PHP (ou même pour adodb également disponibles en extension pour raisons de perfs). Elles te permettent juste d'attaquer N types de sgbdr avec le même code php. Dans ton utilisation, ça te permet de coder le projet en utilisant freetds, et si vraiment il faut en passer par odbc, quand le problème sera identifié et résolu, tu n'as pas une seule ligne de code à changer. Le jour où finalement le client a besoni de ton code sous oracle, pareil.
Enfin ça c'est la théorie, on est bien d'accord que dès qu'il y aura une jointure externe, par exemple, la couche d'abstraction, on oublie.
Sinon je pense que cela peut venir du driver donc pour le moment j'essai d'en rechercher un autre. Je vais tester avec iodbc. En effet, s'il existe d'autres drivers odbc pour ton OS, essaie. Là je
n'ai aucune expérience, j'utilise toujours les drivers fournis par l'éditeur du sgbdr.
Si tu résouds ton problèùe, ça m'intéresse d'avoir la réponse et de la coller en FAQ (pas dans son rôle habituelle de "frequently" mais comme "mémoire" des cas à la con qu'on ne retrouve jamais dans les archives parce qu'on ne sait plus sur quel mot clef chercher.
a++; JG
Re,
oui mais cela ne change rien helas.
Là je suis à court d'idées.
je ne connais pas tres bien ADODB mais il me semble que sous linux
cela ne fonctionne pas ?
adodb (ou d'autres comm pear::db par exemple) sont des couches
d'abstraction au sgbdr écrites en PHP (ou même pour adodb également
disponibles en extension pour raisons de perfs). Elles te permettent
juste d'attaquer N types de sgbdr avec le même code php. Dans ton
utilisation, ça te permet de coder le projet en utilisant freetds, et si
vraiment il faut en passer par odbc, quand le problème sera identifié et
résolu, tu n'as pas une seule ligne de code à changer. Le jour où
finalement le client a besoni de ton code sous oracle, pareil.
Enfin ça c'est la théorie, on est bien d'accord que dès qu'il y aura une
jointure externe, par exemple, la couche d'abstraction, on oublie.
Sinon je pense que cela peut venir du driver donc pour le moment
j'essai d'en rechercher un autre. Je vais tester avec iodbc.
En effet, s'il existe d'autres drivers odbc pour ton OS, essaie. Là je
n'ai aucune expérience, j'utilise toujours les drivers fournis par
l'éditeur du sgbdr.
Si tu résouds ton problèùe, ça m'intéresse d'avoir la réponse et de la
coller en FAQ (pas dans son rôle habituelle de "frequently" mais comme
"mémoire" des cas à la con qu'on ne retrouve jamais dans les archives
parce qu'on ne sait plus sur quel mot clef chercher.
je ne connais pas tres bien ADODB mais il me semble que sous linux cela ne fonctionne pas ? adodb (ou d'autres comm pear::db par exemple) sont des couches
d'abstraction au sgbdr écrites en PHP (ou même pour adodb également disponibles en extension pour raisons de perfs). Elles te permettent juste d'attaquer N types de sgbdr avec le même code php. Dans ton utilisation, ça te permet de coder le projet en utilisant freetds, et si vraiment il faut en passer par odbc, quand le problème sera identifié et résolu, tu n'as pas une seule ligne de code à changer. Le jour où finalement le client a besoni de ton code sous oracle, pareil.
Enfin ça c'est la théorie, on est bien d'accord que dès qu'il y aura une jointure externe, par exemple, la couche d'abstraction, on oublie.
Sinon je pense que cela peut venir du driver donc pour le moment j'essai d'en rechercher un autre. Je vais tester avec iodbc. En effet, s'il existe d'autres drivers odbc pour ton OS, essaie. Là je
n'ai aucune expérience, j'utilise toujours les drivers fournis par l'éditeur du sgbdr.
Si tu résouds ton problèùe, ça m'intéresse d'avoir la réponse et de la coller en FAQ (pas dans son rôle habituelle de "frequently" mais comme "mémoire" des cas à la con qu'on ne retrouve jamais dans les archives parce qu'on ne sait plus sur quel mot clef chercher.