2009-09-30 1 views
3

Voici mon marché: J'ai un site qui exécute PHP 5 (5.2.5 spécifiquement) sur un serveur Windows, qui parle à une base de données MSSQL 2005 pour ses données. J'accède à la base de données en utilisant la dernière version du framework ADODB. J'ai une table avec un identifiant unique et un champ de texte. Tout fonctionne bien jusqu'à ce que le champ de texte atteigne une certaine taille (n'a pas encore pu déterminer le point de coupure exact)PHP et MSSQL - LARGE extraction de champs de texte

Le problème vient lorsque j'essaie de récupérer une chaîne de la base de données d'environ 5 million de caractères. Cette récupération fonctionne correctement si je le fais via le studio SQL Management et renvoie toutes les données.

Le serveur SQL ne renvoie aucun message d'erreur lorsque la requête est exécutée via PHP, mais elle ne renvoie aucune des données réelles.

J'ai joué avec les suspects habituels, comme le mssql.textlimit et upping textsize options de configuration comme ceci:

ini_set("mssql.textlimit",2147483647); 
ini_set("mssql.textsize",2147483647); 

J'ai aussi essayé d'envoyer une requête de « set textsize 2147483647 » sans changement. Si je prends une sous-chaîne des données, je pourrais théoriquement regrouper toutes les données, mais la sous-chaîne renvoie un varchar qui est limité à 8000 caractères et nécessiterait quelque chose comme 875 requêtes pour obtenir le montant total qui n'est pas vraiment une bonne idée.

Quelqu'un a des idées? +

+0

Est-ADODB tronquer la réponse? Est-ce le problème que vous essayez de surmonter? – Neel

Répondre

0

PHP ini a quelques variables que vous voudrez regarder: max_execution_time et memory_limit sont deux.

extension:

Je n'utilise pas ADODB, mais je ne traite avec de plus grands dossiers et enregistrements. PHP peut soit expirer pendant l'exécution (si la requête est difficile), soit s'étouffer avec la taille du résultat. Parfois, vous obtenez un message d'erreur, d'autres fois non. Il est possible que ADODB masque ces erreurs de l'utilisateur - je ne sais pas. Le moyen le plus simple de savoir si c'est le cas est d'exécuter la requête via PHP en utilisant mssql_query() au lieu du framework. Si ce n'est pas le cas, l'ADODB est le problème. Si c'est le cas, tripoter php.ini.

+0

Je ne pense pas que cela résout le problème dans la question. Le problème semble être que ADODB tronque la réponse. Certaines précisions ici seraient probablement utiles ici. – Neel

0

Avez-vous essayé de définir le champ de la base de données sur un BLOB? ou binaire? Il vaudrait peut-être mieux le traiter comme un fichier si c'est si long. À ce stade, vous pouvez également vous intéresser aux systèmes de stockage à valeur-clé tels que Voldemort ou le Dynamo d'Amazon si vous avez beaucoup de fichiers comme celui-ci. Les bases de données relationnelles ne gèrent pas de telles grandes quantités de données. Oui, vous avez mentionné que l'outil d'administration le gère bien, mais va-t-il évoluer?

1

Hy cela pourrait être une option pour vous max_allowed_packet
EDIT:

' 
mysql> SET max_allowed_packet = 2147483647; 
mysql> SELECT id, comment FROM table 
    -> ORDER BY comment; 
' 
That should work 
+0

Consultez également le site web http://cvs.moodle.org/moodle/lib/adodb/adodb-perf.inc.php?view=co – streetparade

Questions connexes