phpbar.de logo

Mailinglisten-Archive

Re: [php] AdoDb feat. Ms-Sql nvarchar auch nur 255 Zeichen ? <-- DIE LÖSUNG

Re: [php] AdoDb feat. Ms-Sql nvarchar auch nur 255 Zeichen ? <-- DIE LÖSUNG

Anton Funk anton.funk at major-new-media.de
Mon Jun 7 16:20:11 CEST 2004


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