php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.05.2011, 16:13  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard Join Abfrage auf ODBC Datenbank

Hallo Community!

Ich stecke grad in einer SQL Abfrage fest. Und zwar darf ich via PHP eine alte Access Datenbank abfragen.

Mein Query sieht wie folgt aus:

PHP-Code:
$db = new db_odbc();
$sql $db->con->prepare("Select kI.Anrede,
                                 kI.Name der Firma,
                                 kI.Vorname,
                                 kI.Nachname,
                                 kI.E-Mail,
                                 aP.Art-Nr,
                                 aP.Positionstext,
                                 aP.Auftrags-Nr,
                                 aI.Auftrags-Nr.,
                                 aI.Kunden-Nummer,
                                 aI.Lieferdatum
                          FROM
                                 T_Kunden tI
                          LEFT JOIN
                                 T_Auftrag aI
                          ON
                                 tI.Kunden-Code = aI.Kunden-Nummer
                          LEFT JOIN
                                 T_Auftragspositionen aP
                          ON
                                 aP.Auftrags-Nr = aI.Auftrags-Nr.
                          LIMIT
                                 0, 10"
);
$sql->execute();
$result $sql->fetchAll();
foreach(
$result as $res){
    echo 
"<pre>";
    
print_r($res);
    echo 
"</pre>";

Der Fehler von SQL so:

Zitat:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 0 [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'kI.Name der Firma'. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)' in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php:33 Stack trace: #0 C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php(33): PDO->prepare('Select kI.Anred...') #1 {main} thrown in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php on line 33
Ein Anlaufversuch war es die, wirklich unsinnig betitelten Spalten, zu escapen, was dann wie folgt aussieht:

PHP-Code:
$db = new db_odbc();
$sql $db->con->prepare("Select kI.Anrede,
                                 kI.\"Name der Firma\",
                                 kI.Vorname,
                                 kI.Nachname,
                                 kI.E-Mail,
                                 aP.Art-Nr,
                                 aP.Positionstext,
                                 aP.\"Auftrags-Nr\",
                                 aI.\"Auftrags-Nr.\",
                                 aI.\"Kunden-Nummer\",
                                 aI.Lieferdatum
                          FROM
                                 T_Kunden tI
                          LEFT JOIN
                                 T_Auftrag aI
                          ON
                                 tI.\"Kunden-Code\" = aI.\"Kunden-Nummer\"
                          LEFT JOIN
                                 T_Auftragspositionen aP
                          ON
                                 aP.\"Auftrags-Nr\" = aI.\"Auftrags-Nr.\"
                          LIMIT
                                 0, 10"
);
$sql->execute();
$result $sql->fetchAll();
foreach(
$result as $res){
    echo 
"<pre>";
    
print_r($res);
    echo 
"</pre>";

Der Fehler dazu sieht aber auch nicht besser aus:

Zitat:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 0 [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'tI.[Kunden-Code] = aI.[Kunden-Nummer] LEFT JOIN T_Auftragspositionen aP ON aP.[Auftrags-Nr] = aI.[Auftrags-Nr.] LI'. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)' in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php:33 Stack trace: #0 C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php(33): PDO->prepare('Select kI.Anred...') #1 {main} thrown in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php on line 33
Wo liegt der Hund begraben? Mit den Join Abfragen hab ich sonst eigentlich keine Probleme

Vielen Dank für jeden Hinweis!

Gruss

eXe
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.05.2011, 16:19  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.235
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Google brachte mich auf folgendes: http://www.wer-weiss-was.de/theme163...le2099405.html
Escapen von Spaltennamen via Backtick, so wie mans aus MySQL kennt. Probiere es mal. Nicht mit doppelten Anführungszeichen.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Alt 04.05.2011, 16:30  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

Habs jetzt so versucht:

PHP-Code:
$sql $db->con->prepare("Select kI.Anrede,
                                 kI.`Name der Firma`,
                                 kI.Vorname,
                                 kI.Nachname,
                                 kI.E-Mail,
                                 aP.Art-Nr,
                                 aP.Positionstext,
                                 aP.`Auftrags-Nr`,
                                 aI.`Auftrags-Nr.`,
                                 aI.`Kunden-Nummer`,
                                 aI.Lieferdatum
                          FROM
                                 T_Kunden tI
                          LEFT JOIN
                                 T_Auftrag aI
                          ON
                                 tI.`Kunden-Code` = aI.`Kunden-Nummer`
                          LEFT JOIN
                                 T_Auftragspositionen aP
                          ON
                                 aP.`Auftrags-Nr` = aI.`Auftrags-Nr.`
                          LIMIT
                                 0, 10"
); 
Der Fehler fällt dabei aber verdächtig ähnlich aus:

Zitat:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 0 [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'tI.`Kunden-Code` = aI.`Kunden-Nummer` LEFT JOIN T_Auftragspositionen aP ON aP.`Auftrags-Nr` = aI.`Auftrags-Nr.` LI'. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)' in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php:33 Stack trace: #0 C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php(33): PDO->prepare('Select kI.Anred...') #1 {main} thrown in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php on line 33
Gruss
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Alt 04.05.2011, 16:31  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

kI.[Name der Firma]
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 04.05.2011, 16:39  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$sql $db->con->prepare("Select kI.Anrede,
                                 kI.[Name der Firma],
                                 kI.Vorname,
                                 kI.Nachname,
                                 kI.E-Mail,
                                 aP.Art-Nr,
                                 aP.Positionstext,
                                 aP.[Auftrags-Nr],
                                 aI.[Auftrags-Nr.],
                                 aI.[Kunden-Nummer],
                                 aI.Lieferdatum
                          FROM
                                 T_Kunden tI
                          LEFT JOIN
                                 T_Auftrag aI
                          ON
                                 tI.[Kunden-Code] = aI.[Kunden-Nummer]
                          LEFT JOIN
                                 T_Auftragspositionen aP
                          ON
                                 aP.[Auftrags-Nr] = aI.[Auftrags-Nr.]
                          LIMIT
                                 0, 10"
); 
Zitat:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 0 [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler (fehlender Operator) in Abfrageausdruck 'tI.[Kunden-Code] = aI.[Kunden-Nummer] LEFT JOIN T_Auftragspositionen aP ON aP.[Auftrags-Nr] = aI.[Auftrags-Nr.] LI'. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)' in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php:33 Stack trace: #0 C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php(33): PDO->prepare('Select kI.Anred...') #1 {main} thrown in C:\Websites\Systemmanagement\Website\comitis\syste m\services\nortonantivirus.php on line 33
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Alt 04.05.2011, 16:57  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

Sonst jemand noch eine Idee?
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Alt 04.05.2011, 17:01  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.235
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Lässt es sich in Access selbst als Abfrage ausführen?
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Alt 04.05.2011, 17:04  
Erfahrener Benutzer
 
Registriert seit: 08.08.2009
Beiträge: 195
PHP-Kenntnisse:
Fortgeschritten
da.eXecutoR befindet sich auf einem aufstrebenden Ast
Standard

Zu meiner Schande ich hab von Access keine Ahnung.

Es geht eigentlich hier nur darum die Aufräge durchzugehen und wenn ein bestimmter Artikel gekauft wurde, dem Kunden eine E-Mail zuzustellen mit einem Link zu einem Feedback Formular.

Ich habe ein anderes Query welches ich zum auslesen von Umsätzen und Kunden verwende, dieses funktioniert einwandfrei, aber ohne JOIN!

Sollte aber doch sicher mit Join auch auf access klappen oder?

Gruss und hab vielen Dank für deine Zeit!
__________________
It's not a bug. It's a feature!
da.eXecutoR ist offline   Mit Zitat antworten
Alt 04.05.2011, 17:18  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Eine Idee noch... schreib mal bei deinen Aliasen "... table_name AS alias".

Hab das grade mal an einer alten Access97 Datenbank ausprobiert, lasse ich das AS weg, bekomme ich auch einen Fehler "fehlender Operator"
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 04.05.2011, 17:18  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.235
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Ich bin mir halt nicht sicher. Generell schon, ABER: Das kommt auch auf die Version drauf an, soweit ich mich erinnere. Und da bei ODBC Treiber hinterhängen, ist evtl. die Ursache, den richtigen DB-Treiber auszuwählen oder die DB auf eine neuere Access-Version mal zu migrieren.

Das wäre aber die Frage, inwieweit da wirklich der JOIN das Problem ist oder halt das Escapen von Spaltennamen. Hast du dort auch Tabellen mit "normalen" Spaltennamen, dass du mal testweise ein Select mit Join darüber absetzen kannst? Dann könntest eingrenzen ob die Spaltennamen oder der JOIN die Ursache ist.

edit: War zu langsam. Ja, das es dort bzgl. echter ANSI-SQL-Kompatibilität Versionsprobleme bei Access gab habe ich auch in Erinnerung, wie gesagt. Ist aber gut ein Jahrzehnt her bei mir.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MSSQL Datenbank via ODBC - leeres Ergebnis baum132645 Datenbanken 6 21.04.2011 14:43
Problem mit Abfrage - join, inner join, distinct? Gachet01 Datenbanken 2 27.01.2011 06:49
Datenbank Abfrage einer Spalte MotteHH Datenbanken 9 12.01.2011 20:04
dynamische sql datenbank abfrage patrick146 JavaScript, Ajax und mehr 7 06.01.2010 16:10
Einfache Abfrage aus mySQL Datenbank Problem ThomasM PHP Tipps 2009 7 05.06.2009 21:06
datenbank abfrage mit php xstefxanx PHP Tipps 2009 11 04.04.2009 18:33
[Erledigt] Datenbank abfrage geordnet anzeigen Octavian PHP Tipps 2009 10 22.03.2009 15:39
Performance von INNER JOIN Abfrage erhöhen - Vorschläge? Timbob Datenbanken 8 05.03.2009 17:54
Kann nicht auf Datenbank mit ODBC zugreifen bettina Datenbanken 13 16.01.2009 18:02
OOP - Datenbank Abfrage ... 7Style PHP Tipps 2008 5 13.02.2008 13:28
INNER JOIN + Suchkriterien + Abfrage duerov PHP Tipps 2006 4 04.04.2006 12:47
ODBC Datenbank Anbindung & Access?! PHP-Fortgeschrittene 1 29.11.2005 14:53
datenbank Abfrage in Var schreiben web2 PHP Tipps 2005-2 3 22.07.2005 12:59
join abfrage bei der etwas nicht ausgegeben werden soll nautiluS Datenbanken 7 03.05.2005 09:54
SQL Abfrage mit LEFT JOIN -> OK, aber ich komm net weiter PHP-Fortgeschrittene 3 04.06.2004 00:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
odbc join, odbc left join, access join abfrage, sql odbc join, access odbc abfrage, \left join\ odbc access sql syntax, odbc driver 42000, odbc datenbank afrage php, odbc datenbank php, join odbc, php join abfrage, php sql join odbc, php odbc join, odbc datenbankanfrage, odbc sql joins, odbc left join abfragen zu langsam, pdo_odbc ms access select, odbc feldnamen backticks, odbc microsoft access driver] syntaxfehler in datum in abfrageausdruck, odbc joins

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:50 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum