ich möchte zuerst danken an alle Autoren des Forums. Das hier ist wirklich eine tolle Seite.
Seit zwei Monaten beschäftige ich mich mit PHP und brauche sooooo sehr Hilfe.
Erst eben gerada habe ich mich registriert und hoffe, dass ich mit eurer Hilfe meine Böse Fehler endlich mal korrigieren kann.
Ich habe am meisten Probleme mit der SQL-Syntax (außer meine Deutsch-Fehlern, meine ich).
Das seltsame ist, dass z.B. eine SQL-Abfrage bei mir ein oder mal funktioniert und dann nicht mehr.
Oder in einem Skript geht es super aber in einem anderen bekomme ich ständig Fehlermeldungen, die wie folgt anfangen:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...."
Ich benutze XAMMP mit den folgenden komponent-Versionen:
Apache/ 2.2.14, PHP/ 5.3.1 und MySQL/5.1.41 , PHP Erweiterung: Mysqli
Ich glaube, solche Fehler passiert bei mir wegen diesen Hochkommata oder doppelte Anführungszeichen. Allein wegen diesem Problem fühle ich mich langsam frustriert.
Hier z.B. habe ich eine abfrage_aufbauen() Funktion, welche ich von einem sehr guten Buch (PHP von Kopf bis Fuß) anzuwenden versuche:
PHP-Code:
public static function abfrage_aufbauen($sortierung){
//teilnehmer JOIN (teilnehmer_job JOIN institut)
$jointeil = "ak_teilnehmer AS t\n" .
"LEFT JOIN (\n" .
"ak_teilnehmer_job AS tj\n" .
"INNER JOIN ak_institut AS i ON tj.tj_institut = i.i_id\n" .
")\n" .
"ON t.t_id = tj.tj_teilnehmer\n";
/*Die Ergebnisse sortieren.
* Diese switch_Anwiesung prüft den Wert von $sortierung und
* hängt ans Ende der Abfrage die entsprechende ORDER BY-Klausel an.
*/
switch ($sortierung) {
//aufsteigend über Nachname
case 1:
$list_sql .= " ORDER BY t_nname";
break;
//absteigend über Nachname
case 2:
$list_sql .= " ORDER BY t_nname DESC";
break;
// aufsteigend über den Beruf
case 3:
$list_sql .= " ORDER BY t_beruf";
break;
// absteigend über den Beruf
case 4:
$list_sql .= " ORDER BY t_beruf DESC";
break;
// aufsteigend über das Institut
case 5:
$list_sql .= " ORDER BY i_name";
break;
// absteigend über das Institut
case 6:
$list_sql .= " ORDER BY i_name DESC";
break;
default:
// Keine Sortierung vorgegeben, nicht sortieren.
}
return $list_sql; // damit der Code, der die Funktion aufgerufen hat, sie verwenden kann.
}
Und die Fehlermeldung sieht so aus:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS t LEFT JOIN ( ak_teilnehmer_job AS tj INNER JOIN ak_institut AS i ON tj.tj_in' at line 2"
Ich wäre sehr dankbar, wenn mir jemand mein Fehler zeigen würde...
Mir erschließt sich der Sinn der Zeilenumbruchs-"Steuerzeichen" \n nicht die Du in das Statement mit reinschreibst.
Ansonsten sieht das Statement meiner Meinung nach, nach dem ersten "überfliegen", in Ordnung aus. Ich kann mich aber auch Irren.
Ich habe am meisten Probleme mit der SQL-Syntax (außer meine Deutsch-Fehlern, meine ich).
es gibt nicht auszusetzen .-
Zitat:
Zitat von Leyyin
Ich wäre sehr dankbar, wenn mir jemand mein Fehler zeigen würde...
wie zuvor angesprochen, kann ich - abgesehen von den steuerzeichen - keine syntaktischen fehler in deinem sql-statement erkennen. ehrlich gesagt wundert's mich, dass die anweisung überhaupt funtioniert:
Zitat:
Zitat von Leyyin
Das seltsame ist, dass z.B. eine SQL-Abfrage bei mir ein oder mal funktioniert und dann nicht mehr.
weitere anmerkungen:
1. warum konkatenierst du die einzelnen bestandteile des sql-statements? das ist unnötig und könnte bspw. so (besser) aussehen:
PHP-Code:
$jointeil =
"
ak_teilnehmer AS t
LEFT JOIN (
ak_teilnehmer_job AS tj
INNER JOIN ak_institut AS i ON tj.tj_institut = i.i_id
)
ON t.t_id = tj.tj_teilnehmer
";
2. programmiere vorzugsweise in englisch; vor allem bei grösseren / umfangreichen vorhaben.
Mir erschließt sich der Sinn der Zeilenumbruchs-"Steuerzeichen" \n nicht die Du in das Statement mit reinschreibst.
Ansonsten sieht das Statement meiner Meinung nach, nach dem ersten "überfliegen", in Ordnung aus. Ich kann mich aber auch Irren.
Danke Knight1,
die Steuerzeichen haben mich auch gestört aber das hat seinen Grund. So ist es passiert: Zuerst hat meine Anfrage nicht funktioniert. Dann habe ich es bei phpMyAdmin rumprobiert , am ende hinbekommen. Die funktionierende Anfrage habe ich in php-Code umgewandelt und diese in meinem Code kopiert. Steuerzeichen sind deswegen enthalten. :) Ich kann sie aber gerne entfernen :) Ist kein Problem.
ehrlich gesagt wundert's mich, dass die anweisung überhaupt funtioniert
Sieht es soo schlimm aus?
Zitat:
Zitat von cortex
warum konkatenierst du die einzelnen bestandteile des sql-statements?
Na ja... Ich habe alles, was ich gelernt habe -vom 0 angefangen- von dem zuvor erwähnten Buch (PHP & MySQL vom Kopf bis Fuß) gelernt und dort stehen die Anfragen nur in diesen Schreibweise. Eigentlich die Art und Weise wie du empfehlt hast kommt mir leichter vor. Ich mache es in der Zukunft so. :) Herzlichen Dank für die Empfehlung.
Zitat:
Zitat von cortex
programmiere vorzugsweise in englisch; vor allem bei grösseren / umfangreichen vorhaben.
Jetz schäme ich mich es zuzugeben: Ich kann leider kein Englisch...
"Etwas stimmte mit dem Query nicht: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@googlemail.com' at line 8"
Der Fehler liegt irgendwie an Mail-Adresse, vielleicht beim Where Klausel aber verstehe ich nicht, was es ist.
Außerdem ist die Zeilenangabe (8) stimmt nicht. Diese Code steht zwischen den Zeilen 138-173. Wiese steht hier (... at line 8)?
Sorry, wenn ich immer mit den selben Kleinigkeiten euch beschäftige. Ich komme aber nicht voran bevor ich diesen überwinde.
Danke schon jetzt.
PHP-Code:
public function doUpdate(array $param) { //teilnehmer JOIN (teilnehmer_job JOIN institut) $jointeil = " ak_teilnehmer AS t LEFT JOIN ( ak_teilnehmer_job AS tj INNER JOIN ak_institut AS i ON tj.tj_institut = i.i_id ) ON t.t_id = tj.tj_teilnehmer ";