Mailinglisten-Archive |
Hallo Leute, ich möchte hier eine "kleine" Lösung des Problems vorstellen. Grund für dieses Posting war wie immer google :-) (such such nix gscheides find) Also, wenn ihr eine MSSQL Datenbank euer eigen nennen dürft und mit PHP arbeitet, werdet Ihr früher oder später auch auf dieses Problem stoßen. Problem : Eine Tabelle enthält ein Feld nvarchar mit einer Länge > 255 Zeichen... F1 : Warum nvarchar und nicht varchar ? A1 : Weil nvarchar Unicode unterstützt und varchar nicht F2 : Warum dann nicht ntext ? A2 : Habt ihr schon mal probiert (mit einer mssql (kein ODBC)) ntext über PHP auszugeben ? Wenns klappt, bitte schreibt mir wie ihr es angestellt habt :-) Wie löst man nun so ein Problem ? Nehmen wir ein Beispiel : Tabelle : MYTABLE [ID][NAME] , wobei NAME = nvarchar ist ( Length sagen wir mal 1024) Als DB Schnittstelle verwende ich AdoDB Falls Ihr Fragen zu AdoDb und Connect habt... schön Googlen ! :-) najut Die Variable $conn ist die connection zur DB Überlegung : F1 : Wie könnte man nun trotzdem komplettes ergebniss aus der DB rauskitzeln ? A1 : Ich habe es mal mit substring versucht Erklärung : Als erstes lesen wir die Länge des jeweiligen Strings raus. *************************PHP***************************************** $sqlQuery = "SELECT LEN(NAME) AS STRLEN FROM MYTABLE WHERE ID = 1"; if(($recordSet = $conn->Execute($sqlQuery)) === false) { echo $conn->ErrorMsg(); exit; } $stringLength = $recordSet->fields["STRLEN"]; // Länge des Strings echo $stringLength; // outbut z.b.: 567 *************************PHP***************************************** Als nächste schritt lesen wir schrittweise teilstrings aus der DB und fügen diese dann wieder zusammen *************************PHP***************************************** $position = 1; while ($stringLength > 0 ) { $sqlQuery = "SELECT SUBSTRING(NAME,$position,255) AS STR FROM MYTABLE WHERE ID = 1"; if(($recordSet = $conn->Execute($sqlQuery)) === false) { echo $conn->ErrorMsg(); exit; } $var = $recordSet->fields["STR"]; $ourString.=$var; $position = $position + 255; // aktuelle position des substr. $stringLength = $stringLength - 255; // stringlänge um 255 verkleinern. } echo $ourString; // unser gesamtstring aus der DB *************************PHP***************************************** So müsste man den komplette String wieder bekommen PS: Diese Methode ist zwar ein wenig "aufwendig" aber wer mich einer besseren lehren möchte... ich bin immer für neue ideen offen Bei Fragen mail an : php at antonfunk.de ----- Original Message ----- From: "Anton Funk" <anton.funk at major-new-media.de> To: "deutschsprachige PHP-Mailingliste" <php at phpbar.de> Sent: Monday, June 07, 2004 11:57 AM Subject: [php] AdoDb feat. Ms-Sql nvarchar auch nur 255 Zeichen ? > Hi Liste, > > ich habe folgendes Problem : > > MS-SQL DB 7.0 ein feld [TYP] = nvarchar [SIZE] = 1024 > > Wenn ich nun mit AdoDb dieses Feld auslese ... gibt er mir nur die ersten > 255 Zeichen und dann ebbe :-( > Hab mal mir FetchField die länge ausgelesen.... 255 ! und in der DB steht > 1024 (und der string ist länger als 255) > > Hat jemand das gleiche Problem schon mal gehabt ? > Bin für jeglichen Lösungsansatz dankbar. > > Gruß > > Anton > > > > > > -- > ** Allgemeine deutschsprachige PHP-Liste: php at phpbar.de ** > Informationen: http://www.phpbar.de > http://lists.phpbar.de/mailman/listinfo/php
php::bar PHP Wiki - Listenarchive