PDO und Insert

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PDO und Insert

    Moin,

    habe da mal ein Problem bezüglich meines Ticketsystem.
    Auch dies stelle ich gerade auf PDO um und hänge nun ein wenig fest

    PHP-Quellcode

    1. // Ticket in Datenbank eintragen
    2. $ticket_array = array();
    3. $ticket_array['message'] = $mailbox->getMail($mailId)->text;
    4. $ticket_array['name'] = $mail->fromName;
    5. $ticket_array['email'] = $mail->fromAddress;
    6. $ticket_array['status'] = 1;
    7. $ticket_array['date'] = $mail->date;
    8. $ticket_array['subject'] = $mail->subject;
    9. $ticket_array['priority'] = '3';
    10. $att = '';
    11. foreach($mail->getAttachments() as $attachment) {
    12. echo $attachment->filePath;
    13. $att .= $attachment->filePath.';';
    14. }
    15. $ticket_array['attachment'] = $att;
    16. // prüfen ob Ticket ID im header ist
    17. if (preg_match('/[A-Z]{3,}-[0-9]{3,}-[0-9]{3,}/', $mail->subject)) {
    18. // Rückgabe der Ticket-ID
    19. preg_match('/[A-Z]{3,}-[0-9]{3,}-[0-9]{3,}/', $mail->subject, $match);
    20. $ticket_id = $match[0];
    21. $varse = "'".$ticket_id."'";
    22. // Status wieder auf Offen setzen
    23. $status_update = array();
    24. $status_update['status'] = 1;
    25. $sql = 'UPDATE ' . TICKETS . ' SET status = 1 WHERE ticket_id_parrent IS NULL AND ticket_id = ' . (string) $varse;
    26. $stmt = MyDB::getInstance()->prepare($sql);
    27. $stmt->execute();
    28. // Ticket zuordnung
    29. $sql = "SELECT * FROM " . TICKETS . " WHERE ticket_id = '" . $ticket_id ."' AND ticket_id_parrent IS NULL";
    30. $stmt = MyDB::getInstance()->prepare($sql);
    31. $stmt->execute();
    32. $row = $stmt->fetch();
    33. $ticket_array['ticket_id_parrent'] = $row['id'];
    34. $ticket_array['ticket_id'] = $ticket_id;
    35. } else {
    36. $ticket_array['ticket_id'] = $Ticket->randomTicket();
    37. }
    38. $sql = "INSERT INTO " . TICKETS. " (message,name,email,status,date,subject,priority,attachment,ticket_id_parrent,ticket_id)
    39. VALUES
    40. (:?,:?,:?,:?,:?,:?,:?,:?,:?,:?)";
    41. $stmt = MyDB::getInstance()->prepare($sql);
    42. $stmt->execute($ticket_array);
    Alles anzeigen


    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\xampp\htdocs\ticket\ticket_imap.php:79 Stack trace: #0 C:\xampp\htdocs\ticket\ticket_imap.php(79): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\ticket\ticket_imap.php on line 79


    Zeile 79 ist der Insert

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Grommel ()

  • Dein Prepared Statement ist falsch.
    Statt ? würde ich Namen benutzen. Dein Array, wo die keyNamen gleich den Statementnamen sein muss, übergibst du dann beim execute.

    Also entweder so:

    Quellcode

    1. $statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
    2. VALUES(:fname, :sname, :age)");
    3. $statement->execute(array(
    4. "fname" => "Bob",
    5. "sname" => "Desaunois",
    6. "age" => "18"
    7. ));


    oder so:

    Quellcode

    1. $statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
    2. VALUES(?, ?, ?)");
    3. $statement->execute(array("Bob", "Desaunois", "18"));
  • Dies habe ich versucht, führt aber wieder zu einem Fehler.
    Wie oben an meinem Code zu erkennen ist

    $ticket_array['ticket_id_parrent'] = $row['id'];

    nur vorhanden wenn der preg_match passt und daran wird es vermutlich scheitern?.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Grommel ()

  • Ich hab es gelöst. Wenn keine id_parrent vorhanden ist mit null füllen

    PHP-Quellcode

    1. $ticket_array['ticket_id_parrent'] = $row['id'];
    2. $ticket_id = $ticket_id;
    3. } else {
    4. $ticket_id_parrent = null;
    5. $ticket_id = $Ticket->randomTicket();
    6. }
    7. $sql = "INSERT INTO " . TICKETS. " (message,name,email,status,date,subject,priority,ticket_id_parrent,attachment,ticket_id)
    8. VALUES
    9. (?,?,?,?,?,?,?,?,?,?)";
    10. $stmt = MyDB::getInstance()->prepare($sql);
    11. $stmt->execute(array($message,$name,$email,$status,$date,$subject,$priority,$ticket_id_parrent,$attachment,$ticket_id));
    Alles anzeigen



    Jetzt habe ich allerdings bei einem UPDATE ein Problem. Er macht immer nur bei einem Wert ein Update

    HTML-Quellcode

    1. <input name="tmark[]" type="checkbox" value="{$list.id}" />


    PHP-Quellcode

    1. /*
    2. * Löschen von Tickets
    3. */
    4. $expression = $_POST['send'] || $_GET['delete'] ;
    5. if (isset($expression))
    6. {
    7. $markers = array();
    8. $mark_clean = array();
    9. $markers = isset($_POST['tmark']) ? $_POST['tmark'] : $_GET['delete'];
    10. for ( $i = 0; $i < count($markers); ++$i )
    11. {
    12. if ( intval($markers[$i]) != 0 )
    13. {
    14. $mark_clean[] = intval($markers[$i]);
    15. }
    16. }
    17. unset($markers);
    18. $markers = implode(',', $mark_clean);
    19. $markers = (empty($markers))? 0 : $markers;
    20. unset($mark_clean);
    21. $status_update = array();
    22. $status_update['status'] = 3;
    23. $pdoparams = array();
    24. $sql = "UPDATE " . TICKETS . " SET status = 3 WHERE id IN (".MyDB::implode($pdoparams, array($markers)).")";
    25. $stmt = MyDB::getInstance()->prepare($sql);
    26. $stmt->execute($pdoparams);
    27. }
    Alles anzeigen