ODBC Abfrage
Facetious
- php
Hi!
es geht um eine anmeldung. es soll überprüft werden ob vorname, nachname und geburtsdatum bereits vorhanden sind
tag, monat und jahr werden in verschiedenen drop down listen ausgewählt
mein statement:
SELECT vorname, nachname, gebdat FROM user WHERE vorname = '".$_POST['vn']."' AND nachname = '".$_POST['nn']."' AND gebdat = '".$_POST['tag'].".".$_POST['monat'].".".$_POST['jahr']."'
fehlermeldung: Datentypen in Kriterienausdruck sind unverträglich
hab auch schon probiert gebdat ohne die -'- zu machen funkt auch nicht
Bitte um Hilfe
mfg Facetious
Hallo,
$SQLStatement = "SELECT vorname, nachname, gebdat FROM user WHERE vorname = '".$_POST['vn']."' AND nachname = '".$_POST['nn']."' AND gebdat = '".$_POST['tag'].".".$_POST['monat'].".".$_POST['jahr']."'";
Was ergibt
echo $SQLStatement;
?
fehlermeldung: Datentypen in Kriterienausdruck sind unverträglich
Welches Datenbanksystem wird abgefragt?
Welchen Datentyp haben die Felder vorname, nachname und gebdat?
viele Grüße
Axel
Hi,
mein statement:
SELECT
vorname,
nachname,
gebdat
FROM
user
WHERE
(<INHALT DER WHERE KLAUSEL>)
fehlermeldung: Datentypen in Kriterienausdruck sind unverträglich
Mit Kriterienausdruck ist der Inhalt der WHERE Klausel gemeint.
Es gibt also eine Typumwandlung, die explizit zu erfolgen hat. Bitte mal das gesamte SQL-Statement "im Moment der Ausfuehrung" hier posten.
Gruss,
Ludger
erstmal danke für eure prompten antworten
das echo ergibt das folglich wird es so auch ausgeführt
das ganze is in access 2003
nachname = text
vorname = text
geburtsdatum = datum, kurz
SELECT nachname, vorname, geburtsdatum FROM schueler WHERE schueler.nachname = 'Pfeiffer' AND schueler.vorname = 'Sebastian' AND schueler.geburtsdatum = '23.02.1987'
mfg Facetious
Hi,
SELECT
nachname,
vorname,
geburtsdatum
FROM
schueler
WHERE
(schueler.nachname = 'Pfeiffer') AND
(schueler.vorname = 'Sebastian') AND
(schueler.geburtsdatum = '23.02.1987')
welche Datentypen? Favorit hier das 'geburtsdatum'.
Gruss,
Ludger
Hi,
SELECT
nachname,
vorname,
geburtsdatum
FROM
schueler
WHERE
(schueler.nachname = 'Pfeiffer') AND
(schueler.vorname = 'Sebastian') AND
(schueler.geburtsdatum = '23.02.1987')welche Datentypen? Favorit hier das 'geburtsdatum'.
funktioniert auch nicht gleiche fehlermeldung
datentyp von geburtsdatum schon wie vorher dazu geschrieben
zeit/datum, kurz
Hi,
funktioniert auch nicht gleiche fehlermeldung
schon klar.
datentyp von geburtsdatum schon wie vorher dazu geschrieben
Dummerweise gibt es diese Datentypen nicht. Das UI von 'M$ Access' gaukelt Dir das in der Deutschen Version nur vor.
Mal die M$ Access Doku bzgl. Datumswerten erforschen! ;-)
Gruss,
Ludger
gut
ich hab ein bisschen gegoogelt
da ist rausgekommen;
format sollte sein: yyyy-mm-dd
gesagt getan, gleiche fehlermeldung
...
mfg Facetious
da ich nicht weiss wie ich meinen post editiere
ich habe das problem gelöst
ich frage ab
... WHERE geburtsdatum = $_POST['jahr'] - $_POST['monat'] - $_POST['tag']
danke für alle beteiligten
mfg und thx Facetious
SELECT vorname, nachname, gebdat FROM user WHERE vorname = '".$_POST['vn']."' AND nachname = '".$_POST['nn']."' AND gebdat = '".$_POST['tag'].".".$_POST['monat'].".".$_POST['jahr']."'
Ich finde es übersichtlicher das so zu schreiben:
$osc = array("'" => "''"); // ODBC-Special-Chars, evtl. unvollständig
$gebdat = sprintf('#%s-%s-%s#', $_POST['jahr'], $_POST['monat'], $_POST['tag']);
$selectStatement = sprintf('SELECT vorname, nachname, gebdat FROM user ' .
'WHERE vorname = "%s" AND nachname = "%s" AND gebdat = "%s"',
strtr($_POST['vn'], $osc),
strtr($_POST['nn'], $osc),
$gebdat);
Das sprintf spart eine Menge Tippfehlersuche bei den Anführungszeichen.
<durchsage type="Flughafen">Achtung Sicherheitshinweis! Verwenden Sie keine Usereingaben ungeprüft!</durchsage>
Was ist, wenn jemand O'Brian heißt, oder ungünstigerweise '; DELETE * FROM tabelle; ?
Ein Kommentar im Manual zu odbc-exec sagt, dass das Datum in # einzuschließen sei und in der Reihenfolge Jahr, Monat, Tag anzugeben ist. Eventuell muss auch noch die Uhrzeit mit dazu...
Hi,
da ist rausgekommen;
format sollte sein: yyyy-mm-dd
ich hatte das gleiche Problem mal vor einigen Jahren. Bitte _wiederum_ das SQL-Statement posten. - So zu sagen aus Gruenden der fachmaennischen Problembearbeitung... ;-)
Gruss,
Ludger
Hallo,
das ganze is in access 2003
geburtsdatum = datum, kurz
Access speichert Datumswerte nicht als String, sondern als Zahl. Eine solche Datumszahl kann mit Hilfe von Funtionen aus Strings oder Zahlen ermittelt werden.
SELECT nachname, vorname, geburtsdatum FROM schueler WHERE schueler.nachname = 'Pfeiffer' AND schueler.vorname = 'Sebastian' AND schueler.geburtsdatum = '23.02.1987'
Du hast ja Tag, Monat, Jahr in einzelnen Werten vorliegen. Deshalb kannst Du die Funktion DateSerial(Jahr, Monat, Tag) nutzen.
SELECT nachname, vorname, geburtsdatum FROM schueler WHERE schueler.nachname = 'Pfeiffer' AND schueler.vorname = 'Sebastian' AND schueler.geburtsdatum = DateSerial(1987, 2, 23)
viele Grüße
Axel