Technik einfach und verständlich erklärt.
Sie können nützliches zu einem interessanten Thema berichten? Dann schreiben sie selbst einen Artikel auf Technikpedia!
 
Technik von Profis erklärt
Auf www.technikpedia.de können Sie Informationen zu verschiedenen Themen aus der Technik und Informatik finden. Durch verschiedene Editoren sind die Artikel besonders informativ und aussagekräftig.
PHP: Select Textfeld von MS-SQL-Datenbank, Zeichen werden abgeschnitten
Wer mit Hilfe der Scriptsprache PHP schon mal auf eine Microsoft-SQL-Datenbank zugegriffen hat, kennt sicherlich das Problem, dass in den Standardeinstellungen beim Auslesen von Textfeldern aus der Datenbank Zeichen beim Auslesen einfach abgeschnitten werden.
Das hängt damit zusammen, dass beim Server der Speicher für den maximal größtmöglichen Wert des Datenbankfeldes vorgehalten werden muss. So wäre dies bei Textfeldern Unmengen an Bytes. In den Standardeinstellungen von PHP ist die Größe der Textfelder, wenn sie ausgelesen werden, aus Performancegründen begrenzt (meist 4096).
Das Problem lässt sich folgendermaßen beheben:
Damit die Texte von Textfeldern nicht mehr nach so „wenigen“ Zeichen abgeschnitten werden, kann auf dem Server, auf welchem PHP installiert ist, die php.ini angepasst werden.
Man suche nach den Zeilen, die mit mssql.textlimit, und mssql.textsize beginnen. Wenn sie nicht vorhanden sind, fügt man sie ein, bzw. entkommentiert die Zeilen, die als Beispiel bereits in der php.ini als Kommentar vorhanden sind.
Man setzt für beide Zeilen einen neuen Wert in Bytes, der ausreichend für die Textfelder ist, die man selektieren möchte. Das sieht dann zum Beispiel so aus:
mssql.textlimit = 10000000
mssql.textsize = 10000000
Wer keinen Zugriff auf die php.ini hat, und über ODBC-Treiber auf die Datenbank zugreift, kann auch sein PHP-Skript anpassen:
Der Zauberbefehl für PHP heißt odbc_longreadlen. Mit ihm steuert man die Nutzung der Text-Felder. Die Syntax für diesen Befehl lautet:
int odbc_longreadlen ( int $result_id , int $length )
Die $result_id ist das Handle, das von odbc_exec zurückgeliefert wurde. Bei $length wird angegeben, wie viel Bytes PHP zurück liefern soll.
Beispiel:
$Sql = ‚SELECT textfeld FROM tabelle‘;
$cc = odbc_connect( $Dsn, $User, $Pwd );
$result = odbc_exec( $cc, $Sql );
odbc_longreadlen($result, 500000);
odbc_fetch_into($result, & $Data );
Daten mittels ASP von der SQL-Datenbank holen
Ein ähnliches Problem gibt es, wenn man Datenfelder vom Typ „Text“ aus der Datenbank mittels ASP holen möchte. Dort muss man einen besonderen Cursortyp angeben:
Dim Db
Set Db = Server.CreateObject( „ADODB.Connection“ )
Db.CursorLocation = 3 ‚ adUseClient
Neben CursorLocation gibt es noch CursorType und Locktype.
Cursortype:
– adOpenForwardOnly: 0
– adOpenKeyset: 1
– adOpenDynaset: 2
– adOpenStatic: 3
CursorLocation:
– adUseServer: 2
– adUseClient: 3
Locktype:
adLockUnspecified: -1
adLockReadOnly: 1
adLockPessimistic: 2
adLockOptimistic: 3
adLockLockBatch: 4