[gelöst] Fehler bei der Tabellenerzeugung (PDOException SQLSTATE 42522 bzw. 42000)

am 09.01.2013 - 08:39 Uhr in
Liebe Forumsmitglieder,
Ich bin Drupal-Anfänger und versuche momentan, mithilfe von Formularen (durch Module erzeugt) Eingaben von Website-Benutzern in eine Datenbank zu speichern. Momentan artet das aber mit dem Fehler "PDOException: SQLSTATE [42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax: [...]" (siehe dazu Dateianhang) aus und ich weiß nicht warum.
Eine Tabelle mit den entsprechenden Attributen erzeuge ich über die .install-Datei, und in der .module-Datei versuche ich (unter Drupal 7.18) mit dem Befehl
function Entitaet_page_form_submit($form, &$form_state) {
drupal_write_record(Entitaet, $form_state['values']);
}
meine Eingaben zu speichern.
Ich habe auch schon versucht, diesen durch das klassische SQL-Stataement zu ersetzen, da hat mir meine Website aber nur ein BLANK geliefert. Außerdem habe ich die Datentypen der Tabelle mit den von mir eingegebenen Testdaten abgeglichen, weil ich dort einen unpassenden Datentyp vermutet habe, was aber anscheinend auch nur falscher Alaram war.
Ich habe bereits versucht, mich mit diversen Foreneinträgen (bspw. http://www.drupalcenter.de/node/40593) schlau zu machen, was aber nicht ganz funktioniert hat (liegt vielleicht auch an meinem noch fehlenden Verständnis). Kann mir vielleicht eine/r von Euch weiterhelfen?
Liebe Grüße,
Igniting
Anhang | Größe |
---|---|
Fehlermeldung.png | 230.52 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
kann es sein
am 09.01.2013 - 09:15 Uhr
dass der, in den settings hinterlegte, datenbankuser keine vollen adminrechte auf der Datenbank hat?
Wie hast du das Statement überprüft?
Läuft es im phpMyAdmin fehlerlos durch?
Nein, der Datenbankuser hat
am 09.01.2013 - 11:13 Uhr
Nein, der Datenbankuser hat volle Zugriffsrechte!
Das Statement habe ich überprüft, indem ich drupal_write_record in der .module-Datei einfach durch db_query("usw.") ersetzt habe (und was dann auch zum BLANK führte).
Im phpMyAdmin werden die Tabellen erzeugt, sodass ich sie auch sehe.
Danke für die Anteilnahme :)
Das Problem sind deine
am 09.01.2013 - 12:19 Uhr
Das Problem sind deine Spaltennamen.
Du solltest die Spalte nicht "E-Mail-Adresse" nennen sondern "e_mail_adresse", dann gibt es auch keine Probleme. In der Fehlermeldung kann man das ziemlich gut sehen, da er den Ort des Fehler ja genau anzeigt: "... near ..."
Das gilt übrigends für alle Felder.
Ich habe es jetzt schon mit
am 09.01.2013 - 15:23 Uhr
Ich habe es jetzt schon mit "e_mail_adresse" und mit "emailadresse" versucht, beide Male erhalte ich wiederum eine etwas andere Fehlermeldung (siehe Anhang).
Und was meinst du mit
Das gilt übrigends für alle Felder.
?
"E-Mail-Adresse" war die einzige Spalte, bei der die Benennung für die Fehlermeldung ausschlaggebend war/ist. Oder verstehe ich das falsch?
Jetzt hast Du aber
am 09.01.2013 - 15:31 Uhr
Jetzt hast Du aber wahrscheinlich vergessen, das Schema in der Install des Modules anzupassen und danach den Cache zu leeren.
An die Änderung im Install
am 09.01.2013 - 15:55 Uhr
An die Änderung im Install habe ich gedacht, aber an den Cache nicht.
Nun habe ich alle dazugehörenden Dateien überprüft und überall, wo erforderlich, steht "emailadresse" und den Cache habe ich auch geleert jedoch meine beiden Versuche haben wieder folgenden Fehler (Anhang) erzeugt.
Kann es noch eine andere Fehlerursache geben außer eine falsche Benennung bzw unterschiedliche Benennungen in den module-/install-Dateien?
Aber vielen Dank für deine Hilfe, ich habe das Gefühl, dass es sich nur noch um eine Kleinigkeit handeln kann.
Hast Du denn die Spalte auch
am 09.01.2013 - 16:02 Uhr
Hast Du denn die Spalte auch in der DB umbenannt, da der SQL-Befehl sie nicht findet?
Hmmmm
am 09.01.2013 - 20:20 Uhr
Darauf bin ich davor ehrlich gesagt nicht draufgekommen. Hab deinen Tipp gleich ausprobiert (also Modul deinstalliert, Spalte der Tabelle umbenannt, Cache geleert, Modul wieder installiert), aber der Fehler will einfach nicht weg.
Das Lustigste ist ja, dass ich momentan ein weiteres Modul installiert habe, welches genau dasselbe macht, wie dieses Modul (also ein Formular erzeugt und Eingaben speichert), jedoch übernimmt das installierte Modul die Datensätze korrekt und ganz ohne Probleme in die Datenbank. Beide Module habe ich auf dieselbe Art und Weise programmiert.
Naja, er findet die Spalte
am 09.01.2013 - 23:00 Uhr
Naja, er findet die Spalte immer noch nicht. Ich habe zu diesem Thema mal ein Tutorial geschrieben:
http://www.sense-design.de/tutorial/drupal-formular-datenbank-speichern
Danke für den Hinweis, jedoch
am 10.01.2013 - 08:11 Uhr
Danke für den Hinweis, jedoch musste ich feststellen, dass dein Tutorial genau jene Seite ist, von der wir überhaupt erfahren haben, wie wir (also mein Team und ich) Module zu diesem Thema programmieren können. Wir haben uns auch an diese Vorlage gehalten und bis auf ein zusätzliches Redirect am Ende alles genauso gemacht, wie es dein Code beschreibt.
Denkst du, es macht Sinn, wenn wir das Modul deinstallieren, "neu programmieren" (sprich kopieren und Variablennamen gut kontrollieren) und vorallem die Datenbank aus phpMyAdmin löschen, falls es dort vielleicht Probleme gibt?
Der "Prototyp" unseres Projekts soll nämlich schon bis morgen fertig sein.
Ich will nicht aufdringlich sein, aber denkst du, es wäre möglich, dass ich dir die .install- und die .module-Datei anhänge und du vielleicht nur kurz drüberschauen könntest?
Hi,ich will nicht
am 10.01.2013 - 09:19 Uhr
Hi,
ich will nicht ausschließen dass mein Tutorial vielleicht einen Fehler hat aber eigentlich sollte das funktionieren.
Pack die beiden Dateien doch einfach hier rein, Tabelle sollte gelöscht werden wenn das Modul deinstalliert wird.
Ich werd mein Tutorial auch nochmal überprüfen.
UPDATE: Mein Tutorial funktioniert einwandfrei.
Wie gesagt, das eine Formular
am 10.01.2013 - 10:10 Uhr
Wie gesagt, das eine Formular funktioniert einwandfrei, nur bei diesem gibt es dieses hartnäckige Problem (daher hätte ich den Code von deiner Website auch niemals angezweifelt). Die .module-Datei befindet sich im Anhang und untenstehend ist die .install-Datei (.install-Dateien werden beim Upload ja nicht unterstützt).
<?php
/**
* Implements hook_schema().
*/
function Partner_schema() {
$schema['Partner'] = array(
'fields' => array(
'Partnernummer' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE),
'Profilnummer' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'Strasse' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'Hausnummer' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'Postleitzahl' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'Stadt' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'Land' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'emailadresse' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'Telefonnummer' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
),
'foreign keys' => array(
'Profil' => array(
'table' => 'Profil',
'columns' => array('Profilnummer' => 'Profilnummer'),
),
'UserId' => array(
'table' => 'users',
'columns' => array('uid' => 'Partnernummer'),
),
),
'primary key' => array('Partnernummer'),
);
return $schema;
}
Für mich ist formal kein Fehler zu erkennen, aber ich hab ja vergleichsweise eher wenig Ahnung/Durchblick.
Kannst Du die Codes entweder
am 10.01.2013 - 10:27 Uhr
Kannst Du die Codes entweder auf pastebin.com packen oder mir direkt schicken. Aus Sicherheitsgründen können hier keine .module Dateien geöffnet werden.
Mail: contact@sense-design.de