Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Fehler beim Daten einfügen in Datenbank    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
cologne1079@gmx.de
Mitglied
Guter User


Dabei seit: 15.02.2010
Herkunft: Kölle
Posts: 358
     Fehler beim Daten einfügen in Datenbank Zitat | Bearbeiten

Tach zusammen.

Aufgrund eines etwas unübersichtlichen prepared statements hat sich scheinbar irgendwo ein Fehler eingeschlichen, den ich nicht identifiziert bekomme:

Das ist das Statement:

 PHP 
1:
2:
3:
4:
<?php
$eintragen 
$pdo->prepare("INSERT INTO Mitarbeiterliste (Aktiv, Anrede, Name, Vorname, Geburtsdatum2, Strasse, Haus-nummer, Adresszusatz, PLZ, Wohnort, email, festnetz, mobil, steuerklasse, steuerid, sozialversicherung, Berufsbezeichnung, Anstellungs-Hierarchie, Beschaeftigungsart, Krankenversicherung, Stundenanzahl je Woche bei Festangestellten, Festgehalt, Stundenlohn, Leitungszulage, Ausbildungsverguetung Jahr 1, Ausbildungsverguetung Jahr 2, Ausbildungsverguetung Jahr 3, Eintrittsdatum2, Datum Unterschrift Ursprungsvertrag2, Datum Probezeitende2, Vertragsbefristung bis2, Vertragswerk, Jobticket, firmenfahrzeug, kennzeichen, hersteller, fabrikat, tueren, hsn, tsn, erstzulassung, halterzulassung, km, sbvollkasko, sbteilkasko, hu, Erste-Hilfe-Kurs erforderlich am, Basisqualifikation vorhanden, Wundexpertin IWC, Pain Nurse, Hygienefachkraft, Praxisanleiterin, Pflegeexperte vorhanden?, PDL-Ausbildung vorhanden, etl, berufsurkunde_personalakte, berufsurkunde_gesundheitsamt, medifox, handzeichen, arbeitsvertrag, etl_vorhanden, berufsurkunde_vorhanden, fuehrungszeugnis, attest, ausweis, fuehrerschein, sozialversicherungsausweis, versicherungsbescheinigung, steuerid_vorhanden, arbeitserlaubnis, lebenslauf, zeugnisse, zertifikate, Bemerkungen) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$eintragen->execute(array("$aktiv""$anrede""$name""$vorname""$geburtsdatum""$strasse""$hausnummer""$adresszusatz""$plz""$wohnort""$email""$festnetz""$mobil""$steuerklasse""$steuerid""$sozialversicherung""$berufsbezeichnung""$hierarchie""$beschaeftigungsart""$krankenversicherung""$stundenanzahl""$festgehalt""$stundenlohn""$leitungszulage""$avjahr1""$avjahr2""$avjahr3""$eintrittsdatum""$unterschriftsdatum""$probezeitende""$vertragsbefristung""$vertragswerk""$jobticket""$firmenfahrzeug""$kennzeichen""$hersteller""$fabrikat""$tueren""$hsn""$tsn""$erstzulassung""$halterzulassung""$km""$sbvollkasko""$sbteilkasko""$hu""$erstehilfe""$basisquali""$wundexperte""$painnurse""$hygienefachkraft""$praxisanleiter""$pflegeexperte""$pdl""$etl""$berufsurkunde_personalakte""$berufsurkunde_gesundheitsamt""$medifox""$handzeichen""$arbeitsvertrag""$etl_vorhanden""$berufsurkunde_vorhanden""$fuehrungszeugnis""$attest""$ausweis""$fuehrerschein""$sozialversicherungsausweis""$versicherungsbescheinigung""$steuerid_vorhanden""$arbeitserlaubnis""$lebenslauf""$zeugnisse""$zertifikate""$bemerkungen")); 
?>


Folgenden Fehler bekomme ich:

Zitat:
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens


Zitat:
Recoverable fatal error: Object of class PDOStatement could not be converted to string


Kann mir jemand aus der Patsche helfen?


13.03.2019, 13:02 Profil | PM | E-Mail  
cologne1079@gmx.de
Mitglied
Guter User


Dabei seit: 15.02.2010
Herkunft: Kölle
Posts: 358
      Zitat | Bearbeiten

$geburtsdatum ist ein "date" und in der Datenbank ist die Spalte auch "date", ist das möglich, dass ich in dem Fall z. B. in Zeile 3 $geburtsdatum ohne strings angeben muss, um das in die Datenbank einzutragen?


13.03.2019, 13:06 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2407
      Zitat | Bearbeiten

Laut Fehlermeldung stimmt die Anzahl der Elemente im Array beim Aufruf der Execute Methode nicht mit der Anzahl an Fragezeichen in der Abfrage überein.

Ich kann mir gut vorstellen, dass es an Spaltenamen wie z.B. "Stundenanzahl je Woche bei Festangestellten" liegen könnte. Also ich habe noch nie gesehen, dass jemand Spaltennamen mit Leerzeichen verwendet. Wenn müsste der Spaltenname dann aber in ` Zeichen gepackt werden.

Zudem macht so etwas hier keinen Sinn: "$aktiv"
Da sollte eher einfach nur $aktiv stehen.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
14.03.2019, 08:22 Profil | PM | E-Mail  
cologne1079@gmx.de
Mitglied
Guter User


Dabei seit: 15.02.2010
Herkunft: Kölle
Posts: 358
      Zitat | Bearbeiten

[quote]Orginal von DingsDaBums
Laut Fehlermeldung stimmt die Anzahl der Elemente im Array beim Aufruf der Execute Methode nicht mit der Anzahl an Fragezeichen in der Abfrage überein.

Ich kann mir gut vorstellen, dass es an Spaltenamen wie z.B. "Stundenanzahl je Woche bei Festangestellten" liegen könnte. Also ich habe noch nie gesehen, dass jemand Spaltennamen mit Leerzeichen verwendet. Wenn müsste der Spaltenname dann aber in ` Zeichen gepackt werden.

Zudem macht so etwas hier keinen Sinn: "$aktiv"
Da sollte eher einfach nur $aktiv stehen.
[/quote]

Moin,

danke erstmal.

Also an der Anzahl kann es nicht liegen. Ich habe gefühlt 10 mal gezählt und überprüft, ob ich irgendwo etwas vergessen habe.

Ja, mit den Spaltennamen die Idee hatte ich auch schon. Hatte aber gehofft, dass es so geht. Die Tabelle wurde von einem Excel importiert und daher diese Spaltennamen. Also werde ich die wohl doch nochmal anpassen.

Ja, das mit dem Aktiv leuchtet mir eigentlich auch ein, da es ja kein String ist. Aber seltsamerweise habe ich diese Problematik in einer anderen Tabelle mal gehabt, dass er den gesamten Datensatz nicht eingetragen hat, weil das aktiv nicht in Strings war (Obwohl eigentlich Zahl). Daher hatte ich es auch hier in Strings gesetzt.

Werde das alles aber mal entsprechend anpassen und dann mal schauen, was er macht.




Post wurde schon 1x editiert, das letzte mal am 14.03.2019 um 11:32 von cologne1079@gmx.de
14.03.2019, 11:31 Profil | PM | E-Mail  
cologne1079@gmx.de
Mitglied
Guter User


Dabei seit: 15.02.2010
Herkunft: Kölle
Posts: 358
      Zitat | Bearbeiten

So, ich brauche nun trotzdem nochmal ein paar zusätzliche Augen. Die Fehlermeldungen sind weg.

ABER: Leider trägt sich nichts in die DB-Tabelle ein.

Mein Statement sieht nun aktuell so aus:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<?php
$eintragen 
$pdo->prepare("INSERT INTO Mitarbeiterliste (Aktiv, Anrede, Name, Vorname, Geburtsdatum2, Strasse, Haus-nummer, Adresszusatz, PLZ, Wohnort, email, festnetz, mobil, steuerklasse, steuerid, sozialversicherung, Berufsbezeichnung, Anstellungs-Hierarchie, Beschaeftigungsart, Krankenversicherung, Stundenanzahl_je_Woche_bei_Festangestellten, Festgehalt, Stundenlohn, Leitungszulage, Ausbildungsverguetung_Jahr_1, Ausbildungsverguetung_Jahr_2, Ausbildungsverguetung_Jahr_3, Eintrittsdatum2, Datum_Unterschrift_Ursprungsvertrag2, Datum_Probezeitende2, Vertragsbefristung_bis2, Vertragswerk, Jobticket, firmenfahrzeug, kennzeichen, hersteller, fabrikat, tueren, hsn, tsn, erstzulassung, halterzulassung, km, sbvollkasko, sbteilkasko, hu, Erste-Hilfe-Kurs_erforderlich_am, Basisqualifikation_vorhanden, Wundexpertin_IWC, Pain_Nurse, Hygienefachkraft, Praxisanleiterin, Pflegeexperte_vorhanden, PDL-Ausbildung_vorhanden, etl, berufsurkunde_personalakte, berufsurkunde_gesundheitsamt, medifox, handzeichen, arbeitsvertrag, etl_vorhanden, berufsurkunde_vorhanden, fuehrungszeugnis, attest, ausweis, fuehrerschein, sozialversicherungsausweis, versicherungsbescheinigung, steuerid_vorhanden, arbeitserlaubnis, lebenslauf, zeugnisse, zertifikate, Bemerkungen) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$eintragen->execute(array("$aktiv""$anrede""$name""$vorname""$geburtsdatum""$strasse""$hausnummer""$adresszusatz""$plz""$wohnort""$email""$festnetz""$mobil""$steuerklasse""$steuerid""$sozialversicherung""$berufsbezeichnung""$hierarchie""$beschaeftigungsart""$krankenversicherung""$stundenanzahl""$festgehalt""$stundenlohn""$leitungszulage""$avjahr1""$avjahr2""$avjahr3""$eintrittsdatum""$unterschriftsdatum""$probezeitende""$vertragsbefristung""$vertragswerk""$jobticket""$firmenfahrzeug""$kennzeichen""$hersteller""$fabrikat""$tueren""$hsn""$tsn""$erstzulassung""$halterzulassung""$km""$sbvollkasko""$sbteilkasko""$hu""$erstehilfe""$basisquali""$wundexperte""$painnurse""$hygienefachkraft""$praxisanleiter""$pflegeexperte""$pdl""$etl""$berufsurkunde_personalakte""$berufsurkunde_gesundheitsamt""$medifox""$handzeichen""$arbeitsvertrag""$etl_vorhanden""$berufsurkunde_vorhanden""$fuehrungszeugnis""$attest""$ausweis""$fuehrerschein""$sozialversicherungsausweis""$versicherungsbescheinigung""$steuerid_vorhanden""$arbeitserlaubnis""$lebenslauf""$zeugnisse""$zertifikate""$bemerkungen")); 
if(
$eintragen == true)
   { 
   echo 
"<p><h3>Der Mitarbeiter wurde erfolgreich angelegt.</h3></p>";
   } 
else 
   { 
   echo 
"<p><h3>Es ist ein Fehler aufgetreten. Bitte wenden Sie sich an den Administrator. Der Mitarbeiter wurde nicht angelegt!</h3></p>";
   } 
?>


Die Tabellenstruktur sieht so aus:

1 id int(10) UNSIGNED Nein kein(e) AUTO_INCREMENT
2 Aktiv varchar(4) utf8_general_ci Ja NULL
3 Anrede varchar(4) utf8_general_ci Ja NULL
4 Name varchar(21) utf8_general_ci Ja NULL
5 Vorname varchar(24) utf8_general_ci Ja NULL
6 Geburtsdatum2 date Nein kein(e)
7 Strasse varchar(22) utf8mb4_unicode_ci Ja NULL
8 Haus-nummer varchar(7) utf8_general_ci Ja NULL
9 Adresszusatz varchar(39) utf8_general_ci Ja NULL
10 PLZ int(5) Ja NULL
11 Wohnort varchar(22) utf8_general_ci Ja NULL
12 email varchar(250) utf8_general_ci Ja NULL
13 festnetz varchar(50) utf8_general_ci Ja NULL
14 mobil varchar(50) utf8_general_ci Ja NULL
15 steuerklasse varchar(10) utf8_general_ci Ja NULL
16 steuerid varchar(15) utf8_general_ci Ja NULL
17 sozialversicherung varchar(50) utf8_general_ci Ja NULL
18 Berufsbezeichnung varchar(55) utf8_general_ci Ja NULL
19 Anstellungs-Hierarchie varchar(36) utf8_general_ci Ja NULL
20 Teams varchar(50) utf8_general_ci Ja NULL
21 Beschaeftigungsart varchar(13) utf8_general_ci Ja NULL
22 Krankenversicherung varchar(36) utf8_general_ci Ja NULL
23 Stundenanzahl_je_Woche_bei_Festangestellten varchar(11) utf8_general_ci Ja NULL
24 Festgehalt varchar(6) utf8_general_ci Ja NULL
25 Stundenlohn decimal(3,2) Ja NULL
26 Leitungszulage int(3) Ja NULL
27 Ausbildungsverguetung_Jahr_1 decimal(5,2) Ja NULL
28 Ausbildungsverguetung_Jahr_2 decimal(6,2) Ja NULL
29 Ausbildungsverguetung_Jahr_3 decimal(6,2) Ja NULL
30 Eintrittsdatum2 date Nein kein(e)
31 Datum_Unterschrift_Ursprungsvertrag2 date Nein kein(e)
32 AV_Aenderungs-Datum2 date Nein kein(e)
33 Austrittsdatum2 date Nein kein(e)
34 Datum_Probezeitende2 date Nein kein(e)
35 Vertragsbefristung_bis2 date Nein kein(e)
36 Vertragswerk varchar(15) utf8_general_ci Ja NULL
37 Jobticket varchar(4) utf8_general_ci Ja NULL
38 firmenfahrzeug varchar(250) utf8_general_ci Ja NULL
39 kennzeichen varchar(20) utf8_general_ci Ja NULL
40 hersteller varchar(100) utf8_general_ci Ja NULL
41 fabrikat varchar(100) utf8_general_ci Ja NULL
42 tueren varchar(20) utf8_general_ci Ja NULL
43 hsn varchar(10) utf8_general_ci Ja NULL
44 tsn varchar(10) utf8_general_ci Ja NULL
45 erstzulassung date Nein kein(e)
46 halterzulassung date Nein kein(e)
47 km varchar(10) utf8_general_ci Ja NULL
48 sbvollkasko varchar(20) utf8_general_ci Ja NULL
49 sbteilkasko varchar(20) utf8_general_ci Ja NULL
50 hu date Nein kein(e)
51 Probezeitendgespraech_gefuehrt_am2 date Nein kein(e)
52 Letztes_Mitarbeitergespraech_gefuehrt_am2 date Nein kein(e)
53 Erste-Hilfe-Kurs_erforderlich_im_Jahr varchar(4) utf8_general_ci Ja NULL
54 Erste-Hilfe-Kurs_erforderlich_am date Nein kein(e)
55 Basisqualifikation_vorhanden varchar(31) utf8_general_ci Ja NULL
56 Wundexpertin_IWC varchar(4) utf8_general_ci Ja NULL
57 Pain_Nurse varchar(4) utf8_general_ci Ja NULL
58 Hygienefachkraft varchar(4) utf8_general_ci Ja NULL
59 Praxisanleiterin varchar(4) utf8_general_ci Ja NULL
60 Pflegeexperte_vorhanden varchar(31) utf8_general_ci Ja NULL
61 PDL-Ausbildung_vorhanden varchar(4) utf8_general_ci Ja NULL
62 etl varchar(50) utf8_general_ci Ja NULL
63 berufsurkunde_personalakte varchar(50) utf8_general_ci Ja NULL
64 berufsurkunde_gesundheitsamt varchar(50) utf8_general_ci Ja NULL
65 medifox varchar(50) utf8_general_ci Ja NULL
66 handzeichen varchar(50) utf8_general_ci Ja NULL
67 arbeitsvertrag varchar(50) utf8_general_ci Ja NULL
68 etl_vorhanden varchar(50) utf8_general_ci Ja NULL
69 berufsurkunde_vorhanden varchar(50) utf8_general_ci Ja NULL
70 fuehrungszeugnis varchar(50) utf8_general_ci Ja NULL
71 attest varchar(50) utf8_general_ci Ja NULL
72 ausweis varchar(50) utf8_general_ci Ja NULL
73 fuehrerschein varchar(50) utf8_general_ci Ja NULL
74 sozialversicherungsausweis varchar(50) utf8_general_ci Ja NULL
75 versicherungsbescheinigung varchar(50) utf8_general_ci Ja NULL
76 steuerid_vorhanden varchar(50) utf8_general_ci Ja NULL
77 arbeitserlaubnis varchar(50) utf8_general_ci Ja NULL
78 lebenslauf varchar(50) utf8_general_ci Ja NULL
79 zeugnisse varchar(50) utf8_general_ci Ja NULL
80 zertifikate varchar(50) utf8_general_ci Ja NULL
81 Bemerkung text utf8_general_ci Ja NULL

Ich hatte mal einen Testeintrag gemacht mit diversen Daten. Diese Testdaten wurden wie folgt an die Datenbank übergeben aber nicht eingetragen:

Ja, Herrn, Mustermann, Max, 1979-10-10, Musterstr., 1, 1, 12345, Musterstadt, mustermann@musterdomain.com, 0123/4567890, 0987/6543210, Eins, 12345678901, Nein, Examinierte Altenpflegerin, Team-Mitglied Pflege, Vollzeit, BARMER, 40, , 16,00, , , , , 2019-03-01, 2019-03-01, 6 Monate, 0000-00-00, neu, Nein, Nein, , , , , , , 0000-00-00, 0000-00-00, , , , 0000-00-00, 0000-00-00, Ja, Nein, Ja, Nein, Nein, Ja, Nein, Ja, Ja, Ja, Ja, Nein, Ja, Ja, Ja, Ja (Erweitertes polizeiliches Führungszeugnis), Ja, Ja, Nicht erforderlich, Nicht erforderlich, Ja, Ja, Ja, Nein, Nein, Nein, test

Sieht jemand irgendwo einen oder mehrere Fehler, die mir einfach nicht ins Auge fallen wollen?




Post wurde schon 1x editiert, das letzte mal am 18.03.2019 um 11:22 von cologne1079@gmx.de
15.03.2019, 11:00 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2407
      Zitat | Bearbeiten

Dieses "$aktiv" ist nicht notwendig, da $aktiv sicher einen String beinhaltet, wenn der Inhalt "Ja" lautet.

Zudem würde ich zur Sicherheit immer alle Passwörter und Nutzernamen aus dem Code löschen, bevor du den hier veröffentlichst :)

Um möglichst Fehlermeldungen angezeigt zu bekommen, weil es ja offensichtlich ja irgendwo einen Fehler geben muss, da sonst die Daten zumindest irgendwie in die Datenbank eingetragen werden würden, würde ich folgenden Code mal als zweite Zeile hinzufügen:
 PHP 
1:
2:
3:
4:
5:
<?php
$pdo 
= new PDO('mysql:host=localhost;dbname=*****''****''****'); // nach dieser Zeile folgende Zeile einfügen
$pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

// restlicher Code... 


Dann müsste es eigentlich irgendeine Fehlermeldung geben, die weiterhelfen könnte.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
15.03.2019, 16:05 Profil | PM | E-Mail  
cologne1079@gmx.de
Mitglied
Guter User


Dabei seit: 15.02.2010
Herkunft: Kölle
Posts: 358
      Zitat | Bearbeiten

[quote]Orginal von DingsDaBums
Dieses "$aktiv" ist nicht notwendig, da $aktiv sicher einen String beinhaltet, wenn der Inhalt "Ja" lautet.

Zudem würde ich zur Sicherheit immer alle Passwörter und Nutzernamen aus dem Code löschen, bevor du den hier veröffentlichst

Um möglichst Fehlermeldungen angezeigt zu bekommen, weil es ja offensichtlich ja irgendwo einen Fehler geben muss, da sonst die Daten zumindest irgendwie in die Datenbank eingetragen werden würden, würde ich folgenden Code mal als zweite Zeile hinzufügen:
 PHP 
1:
2:
3:
4:
5:
<?php
$pdo 
= new PDO('mysql:host=localhost;dbname=*****''****''****'); // nach dieser Zeile folgende Zeile einfügen
$pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

// restlicher Code... 


Dann müsste es eigentlich irgendeine Fehlermeldung geben, die weiterhelfen könnte.
[/quote]

Danke, ganz böse mit dem Zugang zur Datenbank. Ist mir noch nie passiert und war auch nicht beabsichtigt. Danke für den Hinweis, habe ich direkt gelöscht.

Deine Hilfe hat auch was gebracht. Den Fehler habe ich gefunden. Einige Spalten in de DB hatten ein "-" im Namen. Mir war nicht bekannt, dass das nicht erlaubt ist. Spaltennamen habe ich entsprechend geändert. Nun geht alles. Vielen Dank!





Heute, 11:41 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Fehler beim Daten einfügen in Datenbank   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz