Textbegrenzung bei MS-SQL-Datenbanken

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Textbegrenzung bei MS-SQL-Datenbanken

    Hallo,
    ich muss aus einer MS-SQL-Datenbank ein Textfeld auslesen. und mache das mit '$array = mssql_fetch_array($res)'.Der Textblock wird aber leider bei 255 Zeichen abgeschnitten. In der php.ini gibt es die Möglichkeit mit mssql.textsize und mssql.textlimit den Vorgabewert (=4096) zu ändern. Eine Änderung der Werte hat aber keinen Einfluss, dass Ergebnis bleibt das gleiche. (testhalber habe ich es auch mal mit dem Wert 0 versucht). Weiss jemand einen Rat. Vielen Dank im Voraus.
    mfg Walter

  • #2
    du benutzt ein feld varchar oder? maxlenght == 255 nimm einfach feld typ text oder longtext, je nachdem wieviel du unter bringen willst.

    *verschieb* zu sql
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Re: Textbegrenzung bei MS-SQL-Datenbanken

      Original geschrieben von Walter
      Hallo,
      ich muss aus einer MS-SQL-Datenbank ein Textfeld auslesen. und mache das mit '$array = mssql_fetch_array($res)'.Der Textblock wird aber leider bei 255 Zeichen abgeschnitten. In der php.ini gibt es die Möglichkeit mit mssql.textsize und mssql.textlimit den Vorgabewert (=4096) zu ändern. Eine Änderung der Werte hat aber keinen Einfluss, dass Ergebnis bleibt das gleiche. (testhalber habe ich es auch mal mit dem Wert 0 versucht). Weiss jemand einen Rat. Vielen Dank im Voraus.
      mfg Walter
      also ich hab' keine Schwierigkeiten text-Felder von MS-SQL-DB. Jedoch sind die beiden Einträge bei mir in der php.ini mit ; auskommentiert.

      Bei mir:

      W2K Advandce Server
      Apache 2.0.48
      PHP 4.3.4

      Kommentar


      • #4
        Hallo,
        also das hat nichts mit varchar zu tun. In der MS-SQL-DB ist es ein Textfeld und das wird erst mal mit php ausgelesen. Also:
        Select Feld1,Feld2 usw From DB WHERE usw.
        $res = usw.
        while ($arrData = mssql_fetch_array($res)):
        print("$arrData[Feld1]");
        usw.
        in arrData[Feld1] ist der Text schon abgeschnitten. Da ist auch kein Steuerzeichen oder ähnliches drin.
        Bei mir waren die Einstellungen in der php.ini auch mit ; auskommentiert. Ich habs halt mal probiert.
        Gruss Walter

        Kommentar


        • #5
          da ich auch Newbie in Sachen PHP bin, kann ich echt nicht sagen woran es liegt. Doch es fällt mir auf , dass du:

          1. result type nicht angegeben hast, IMHO es wäre besser mit
          $arrData = mssql_fetch_array($res,MSSQL_ASSOC)
          2. Feldname nicht als String übergibt, wenn du E_ALL eingeschaltet hast, wirst du feststellen, dass PHP dir Nachrichten schickt, weil er das nicht mag, also besser:
          $arrData['Feld1']

          mehr weiss ich nicht, hier sind die Einstellungen bei mir; die auskommentierten Option habe ich schon gelöscht.

          Code:
          [MSSQL]
          ; Allow or prevent persistent links.
          mssql.allow_persistent = On
          
          ; Maximum number of persistent links.  -1 means no limit.
          mssql.max_persistent = -1
          
          ; Maximum number of links (persistent+non persistent).  -1 means no limit.
          mssql.max_links = -1
          
          ; Minimum error severity to display.
          mssql.min_error_severity = 10
          
          ; Minimum message severity to display.
          mssql.min_message_severity = 10
          
          ; Compatability mode with old versions of PHP 3.0.
          mssql.compatability_mode = Off
          
          ; Connec timeout
          mssql.connect_timeout = 60
          
          ; Query timeout
          mssql.timeout = 60
          
          ; Specify how datetime and datetim4 columns are returned
          ; On => Returns data converted to SQL server settings
          ; Off => Returns values as YYYY-MM-DD hh:mm:ss
          mssql.datetimeconvert = On
          
          ; Use NT authentication when connecting to the server
          mssql.secure_connection = Off

          Kommentar


          • #6
            Also das man mssql_fetch_array einen Ergebnistyp als Parameter mitgeben kann, habe ich nicht gewusst. In meinem Handbuch (chm-Version) steht es anders. Im php-manual (en) ist es aber so beschrieben. Macht aber nichts, das Ergebnis ist das gleiche. Ich benutze auch Vers. 4.3.4. Die Quotes sind alle richtig, ich habe das hier nur mal schnell so hingeschrieben. Einstellungen in der php.ini sind bei mir identisch. Ich benutze Vers. 7.0 von php_mssql.dll. Falls Du eine neuere Vers. benutzt, kannst Du mir das bitte noch mal mitteilen und vor allen Dingen wo man die dann herbekommt. Danke. mfg

            Kommentar


            • #7
              ich hab auch nur die v 7.0

              wie läuft PHP bei dir ? bei mir als Modul in Apache.

              Kommentar


              • #8
                Ich habe den OmniHttpD. Ich bin aber zu 90% davon überzeugt, dass dies nur eine klitzekleine Einstellung irgendwo in der php.ini ist, weil php eben gar nicht auf die Einstellung mssql.textsize reagiert. Frage ist halt nur WO?

                Kommentar


                • #9
                  hallo,

                  hast du inzwischen eine Lösung gefunden ?

                  ich hänge jetzt am selben Problem :-(

                  Grüssle von Jürgen

                  Kommentar


                  • #10
                    Habe leider noch keine Lösung gefunden.

                    Kommentar


                    • #11
                      hallo,

                      sodele - bin ein Schritt weiter :-)

                      ich möchte nun die Lösung euch nicht vorenthalten:


                      Ein Hinweis auf das Problem:

                      -> http://www.phpbuilder.com/lists/php-...03071/0002.php


                      mein Workarround:

                      -> $query = "select convert (text,dicttext) as dicttext from mails";


                      und siehe da:

                      $text = $row[ "dicttext" ];

                      liefert nun den Text in voller Länge zurück ;-)


                      [Achtung: ich hab weniger als 3000 Zeichen in dem MS-SQL-Feld gespeichert - wie sich die Sache nun bei einem grösseren Feld verhält hab ich jetzt nicht mehr getestet ...]


                      Jürgen
                      http://www.db-server.de

                      Kommentar


                      • #12
                        Danke jmayer für Deine Bemühungen, aber mssql versteht die Funktion 'convert' nicht ????
                        Gruss Walter

                        Kommentar


                        • #13
                          Aber sicher ... zumindest SQL-Server 2000 ... !

                          CAST und CONVERT
                          Konvertiert einen Ausdruck explizit von einem Datentyp in einen anderen. Die Funktionalität von CAST und CONVERT ist ähnlich.

                          Syntax
                          Verwenden von CAST:


                          CAST ( expression AS data_type )

                          Verwenden von CONVERT:

                          CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

                          carpe noctem

                          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                          Kommentar


                          • #14
                            Sorry, habe wohl zu schnell gepostet ohne die Funktion richtig zu verstehen. Werde mich schlau machen. Danke

                            Kommentar


                            • #15
                              Also convert u. cast klappen bei mir nicht. Das liegt wohl daran, dass
                              im SQL-Server die Felder als varchar mit der entsprechenden Länge gespeichert sind. Aber dank Eurer Hinweise habe ich es jetzt mal mit substring versucht. Also SELECT SUBSTRING(Field,1,255) AS INHALT0,
                              SUBSTRING(Field,256,610) AS INHALT1.......
                              $INHALT = $arrdata["INHALT0"].$arrdata["INHALT1"] usw.
                              Ist sicher nicht die eleganteste Lösung aber für meine Belange erst mal ausreichend, da ich mich von der Länge her auf 4 Substrings begrenzen kann.
                              Also danke, dass Ihr mir wieder auf die Beine geholfen habt.
                              Gruss Walter

                              Kommentar

                              Lädt...
                              X