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