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-Code:
$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
Als nächste schritt lesen wir schrittweise teilstrings aus der DB und fügen diese dann wieder zusammen
PHP-Code:
$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
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
Gruß RDJ