MSSQL SELECT
am 06.04.2006 20:55:23 von Mark Knochen
Hallo,
habe nach einer Neuinstallation nun endlich den MSSQL-Server mit PHP zum
reden gebracht ....
ich habe folgendes MySQL-SELECT
SELECT * FROM user WHERE user = 'admin'
in MySQL klappt das ...
Im MSSQL Server wird die Syntax als richtig erkannt, liefert aber kein
Ergebnis. Wenn ich hingegen hier
SELECT * FROM user
ausführe, bekomme ich die gesamte Liste ...
Liegt schon bei diesem einfachen SELECT ein Fehler vor?
Mark
Re: MSSQL SELECT
am 06.04.2006 21:26:25 von Mark Knochen
> SELECT * FROM user WHERE user = 'admin'
>
> in MySQL klappt das ...
>
> Im MSSQL Server wird die Syntax als richtig erkannt, liefert aber kein
> Ergebnis. Wenn ich hingegen hier
>
> SELECT * FROM user
>
> ausführe, bekomme ich die gesamte Liste ...
>
> Liegt schon bei diesem einfachen SELECT ein Fehler vor?
>
Außerdem: Eine Feld mit keinem Inhalt prüfe ich per PHP mit
if(FELD == "") ...
MSSQL gibt ein Leerzeichenzurück, so dass die Abfrage nur greift, wenn ich
if(FELD == " ") ...
Das erscheint mir nicht so richtig, oder?
Mark
Re: MSSQL SELECT
am 06.04.2006 21:43:44 von Bodo Kaelberer
Hi Mark
Mark Knochen am Thu, 06 Apr 2006 20:55:23 +0200:
> habe nach einer Neuinstallation nun endlich den MSSQL-Server mit PHP zum
> reden gebracht ....
Dann poste doch einmal, wie es nun funktioniert. Damit das mal für die
Nachwelt festgehalten ist.
--
1 Bodo Kaelberer
123 http://www.webkind.de/ http://www.kaelberer-aio.de/
3 Dem Verständnis ist meist gut getan, wenn man richtig lesen
4 kann.
Re: MSSQL SELECT
am 06.04.2006 21:47:52 von Mark Knochen
Bodo Kaelberer wrote:
> Hi Mark
>
> Mark Knochen am Thu, 06 Apr 2006 20:55:23 +0200:
>
>
>>habe nach einer Neuinstallation nun endlich den MSSQL-Server mit PHP zum
>>reden gebracht ....
>
>
> Dann poste doch einmal, wie es nun funktioniert. Damit das mal für die
> Nachwelt festgehalten ist.
>
Ich habe den MS SQL Server 2000 noch einmal neu installiert.
Alle Verbindungsdaten komplett über die Windows-Authentifizierung regeln
lassen.
Keinen Service-Namen angegeben und auch den Nutzer "sa" kein Kennwort
gegegebn .. vorerst (das sollte sich jetzt aber ändern lassen)
Danach klappte die Verbindung zum Server sofort
per
mssql_connect("MEINPC","sa","");
Nur jetzt folgt der Ärger mit dem Umheben der MySQL-DB.
Ich habe jetzt die Daten per ODBC in den MSSQL-Server übertragen.
Folge:
Die Tabellen müssen nachbearbeitet werden, Fehlende Inhalte in
Textfeldern, tlw. falsche Umlaute, und Probleme bei der PHP-seitigen
Verwendung der Daten aus der DB ...
Ich verstehe nicht, warum das ganze so ein Theater sein muss.
Mark
Re: MSSQL SELECT
am 06.04.2006 21:48:15 von Bodo Kaelberer
Abend
Mark Knochen am Thu, 06 Apr 2006 21:26:25 +0200:
> Außerdem: Eine Feld mit keinem Inhalt prüfe ich per PHP mit
>
> if(FELD == "") ...
>
> MSSQL gibt ein Leerzeichenzurück, so dass die Abfrage nur greift, wenn ich
>
> if(FELD == " ") ...
>
> Das erscheint mir nicht so richtig, oder?
Wenn wirklich eine leere Zeichenkette in der Datenbank ist, wäre das
ziemlicher Käse. Vielleicht ist die Spalte aber gar nicht leer?
MySQL hat, zumindest in früheren Versionen, eine Zeichenkette mit
einem Leerzeichen auch als leere Zeichenkette wieder ausgegeben. Ich
weiss aber nicht, was von beiden nun in der Datenbank stand.
Bye
--
1 Bodo Kaelberer
123 http://www.webkind.de/ http://www.kaelberer-aio.de/
3 Dem Verständnis ist meist gut getan, wenn man richtig lesen
4 kann.
Re: MSSQL SELECT
am 06.04.2006 21:51:08 von Mark Knochen
> Folge:
>
> Die Tabellen müssen nachbearbeitet werden, Fehlende Inhalte in
> Textfeldern, tlw. falsche Umlaute, und Probleme bei der PHP-seitigen
> Verwendung der Daten aus der DB ...
Und per MySQL gesetzte Vorbelegungen für einzelne Tabellenfelder sind
nicht mehr verfügbar
Mark
Re: MSSQL SELECT
am 06.04.2006 21:53:53 von Mark Knochen
>
> Wenn wirklich eine leere Zeichenkette in der Datenbank ist, wäre das
> ziemlicher Käse. Vielleicht ist die Spalte aber gar nicht leer?
>
Naja, in MySQL ist es ein leeres VARCHAR(255) Feld - nicht
ungewöhnlich finde ich ...
Im MSSQL ist es ein " " Feld
Mark
Re: MSSQL SELECT
am 06.04.2006 22:29:44 von Johannes Vogel
Hi Mark
Mark Knochen wrote:
>> Wenn wirklich eine leere Zeichenkette in der Datenbank ist, wäre das
>> ziemlicher Käse. Vielleicht ist die Spalte aber gar nicht leer?
> Naja, in MySQL ist es ein leeres VARCHAR(255) Feld - nicht ungewöhnlich
> finde ich ...
> Im MSSQL ist es ein " " Feld
In der relationalen Datenbank-Welt unterscheiden wir ohne Inhalt (NULL)
und leer (""). Was ist denn in diesem Feld?
Ausserdem prüfe ich lieber mit empty().
Grüess, Johannes
Re: MSSQL SELECT
am 06.04.2006 22:32:11 von Johannes Vogel
Hi Mark
Mark Knochen wrote:
> Ich verstehe nicht, warum das ganze so ein Theater sein muss.
Weil SQL kein zwingender Standard ist. Ob nun MySQL oder MSSQL nicht
regelkonform ist, sei mal dahingestellt. Beide Urheber sind jedoch nicht
gerade bekannt, sich an Standards zu halten.
HTH (beruhigend), Johannes
Re: MSSQL SELECT
am 06.04.2006 22:37:57 von Mark Knochen
Johannes Vogel wrote:
> Hi Mark
>
> Mark Knochen wrote:
>
>>>Wenn wirklich eine leere Zeichenkette in der Datenbank ist, wäre das
>>>ziemlicher Käse. Vielleicht ist die Spalte aber gar nicht leer?
>>
>> Naja, in MySQL ist es ein leeres VARCHAR(255) Feld - nicht ungewöhnlich
>>finde ich ...
>>Im MSSQL ist es ein " " Feld
>
>
> In der relationalen Datenbank-Welt unterscheiden wir ohne Inhalt (NULL)
> und leer (""). Was ist denn in diesem Feld?
Das Feld ist leer - es ist nicht NULL.
>
> Ausserdem prüfe ich lieber mit empty().
Mein Problem ist insgesamt folgendes (hat sich ja bestimmt schon
rumgesprochen):
Ich habe nun mittlerweile mit PHP Verbindung zum MSSQL-Server
aufgenommen. Dort hatte ich vorher per ODBC eine MySQL-DB übertragen.
Nun möchte ich - selbstverständlich mit wenig Aufwand - die Anwendung,
die bislang mit PHP / MySQL lief, mit PHP / MSSQL betreiben.
Und ich weiss nicht so recht wie ich anfangen soll.
Und sich durch die Seite zu klicken und die Fehlermeldungen abzuarbeiten
ist nicht besonders lustig.
Mark
> Grüess, Johannes
Re: MSSQL SELECT
am 07.04.2006 00:22:09 von Bodo Kaelberer
Mark Knochen am Thu, 06 Apr 2006 21:53:53 +0200:
> > Wenn wirklich eine leere Zeichenkette in der Datenbank ist, wäre das
> > ziemlicher Käse. Vielleicht ist die Spalte aber gar nicht leer?
> >
> Naja, in MySQL ist es ein leeres VARCHAR(255) Feld - nicht
> ungewöhnlich finde ich ...
Natürlich nicht. Was mich interessiert ist, ob das Feld wirklich leer
ist oder ob es von MySQL als leer angezeigt wird, aber in Wirklichkeit
ein Leerzeichen drin ist.
--
1 Bodo Kaelberer
123 http://www.webkind.de/ http://www.kaelberer-aio.de/
3 Dem Verständnis ist meist gut getan, wenn man richtig lesen
4 kann.
Re: MSSQL SELECT
am 07.04.2006 00:31:34 von Mark Knochen
Bodo Kaelberer wrote:
> Mark Knochen am Thu, 06 Apr 2006 21:53:53 +0200:
>
>
>>>Wenn wirklich eine leere Zeichenkette in der Datenbank ist, wäre das
>>>ziemlicher Käse. Vielleicht ist die Spalte aber gar nicht leer?
>>>
>>
>> Naja, in MySQL ist es ein leeres VARCHAR(255) Feld - nicht
>>ungewöhnlich finde ich ...
>
>
> Natürlich nicht. Was mich interessiert ist, ob das Feld wirklich leer
> ist oder ob es von MySQL als leer angezeigt wird, aber in Wirklichkeit
> ein Leerzeichen drin ist.
>
Standard ist:
title varchar(255) NOT NULL default '',
Aber ich sehe gerade - nach dem ODBC-Import ist in der Spalte ein
Zeilenumbruch oder so ... wenn ich mir den Inhalt kopiere bekomme ich
---schnipp---
---schnapp---
Also wie einen Zeilenumbruch ... kann ich das schon beim Import
verhindern? Oder beim CREATE TABLE ausschließen?
Mark
Re: MSSQL SELECT
am 07.04.2006 01:10:15 von Bodo Kaelberer
Mark Knochen am Fri, 07 Apr 2006 00:31:34 +0200:
> Standard ist:
>
> title varchar(255) NOT NULL default '',
>
> Aber ich sehe gerade - nach dem ODBC-Import ist in der Spalte ein
> Zeilenumbruch oder so ... wenn ich mir den Inhalt kopiere bekomme ich
>
> ---schnipp---
>
> ---schnapp---
Das ist jetzt so nicht direkt erkennbar, welches Zeichen das ist. Aber
Du hast offenbar eines gefunden.
> Also wie einen Zeilenumbruch ... kann ich das schon beim Import
> verhindern? Oder beim CREATE TABLE ausschließen?
Beim CREATE wüsste ich nichts. Was beim Import/Export möglich ist,
hängt davon ab, was das verwendete Tool kann. Ist der obskure Wert
denn bereits in der MySQL-Tabelle vorhanden? Dann lass da mal ein
Script drüberlaufen.
--
1 Bodo Kaelberer
123 http://www.webkind.de/ http://www.kaelberer-aio.de/
3 Dem Verständnis ist meist gut getan, wenn man richtig lesen
4 kann.
Re: MSSQL SELECT
am 07.04.2006 16:50:56 von Irmgard Schwenteck
Mark Knochen schrieb:
> Ich habe den MS SQL Server 2000 noch einmal neu installiert.
> Alle Verbindungsdaten komplett über die Windows-Authentifizierung regeln
> lassen.
....
> mssql_connect("MEINPC","sa","");
Das widerspricht sich aber.
Außerdem: Intranet-Anwendungen läßt man doch niemals nicht über den sa
laufen.
Da wird ein Konto eingerichtet mit genau den erforderlichen
Berechtigungen in genau dieser Datenbank.
> Keinen Service-Namen angegeben und auch den Nutzer "sa" kein Kennwort
> gegegebn .. vorerst (das sollte sich jetzt aber ändern lassen)
Um Himmelswillen, warum denn das?
Richte Dir zum Testen einen Account mit Admin-Rechten ein und schließ
das sa-passwort ganz weit weg.
> Nur jetzt folgt der Ärger mit dem Umheben der MySQL-DB.
>
> Ich habe jetzt die Daten per ODBC in den MSSQL-Server übertragen.
Da würde ich jetzt aber ganz gründlich die Tabelleninhalte prüfen.
Über das Problem mit fehlenden NULL-Werten bist Du ja schon gestolpert.
Der Konvertierung der Datumswerte würde ich auch nicht ohne weiteres trauen.
> Die Tabellen müssen nachbearbeitet werden, Fehlende Inhalte in
> Textfeldern, tlw. falsche Umlaute, und Probleme bei der PHP-seitigen
> Verwendung der Daten aus der DB ...
Als mögliche schnelle Lösung vielleicht dieses:
es gibt einen ODBC-Treiber für Access auf MySQL-Datenbanken.
Tabellen in Access verknüpfen, dort als Tabellen abspeichern.
Access-tabellen lassen sich relativ problemlos von MSSQL importieren.
Gruß
Irmgard
Re: MSSQL SELECT
am 07.04.2006 17:22:26 von Johannes Vogel
Hi Mark
Mark Knochen wrote:
> Aber ich sehe gerade - nach dem ODBC-Import ist in der Spalte ein
> Zeilenumbruch oder so ... wenn ich mir den Inhalt kopiere bekomme ich
> Also wie einen Zeilenumbruch ... kann ich das schon beim Import
> verhindern? Oder beim CREATE TABLE ausschließen?
Wieso tust du das nicht einfach nachträglich eliminieren? REPLACE ist
dein Freund. Ausserdem ist's sicher sinnvoll, erst herauszufinden,
welchen ASCII-Code das Zeichen hat. ORD ist dein Freund.
HTH, Johannes