Ankündigung

Einklappen
Keine Ankündigung bisher.

mysqli prepared statement update funtkioniert nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysqli prepared statement update funtkioniert nicht

    Hallo,

    folgende Datenbank test mit Tabelle users (1 Eintrag) ist gegeben:
    Code:
    -- --------------------------------------------------------
    -- Host:                         192.168.56.1
    -- Server Version:               10.1.26-MariaDB-0+deb9u1 - Debian 9.1
    -- Server Betriebssystem:        debian-linux-gnu
    -- HeidiSQL Version:             9.5.0.5196
    -- --------------------------------------------------------
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET NAMES utf8 */;
    /*!50503 SET NAMES utf8mb4 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    
    CREATE DATABASE IF NOT EXISTS `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
    USE `test`;
    
    CREATE TABLE IF NOT EXISTS `users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `first_name` varchar(255) NOT NULL DEFAULT '0',
      `last_name` varchar(255) NOT NULL DEFAULT '0',
      `email` varchar(255) NOT NULL DEFAULT '0',
      `role` int(2) unsigned NOT NULL DEFAULT '3',
      `password` char(60) NOT NULL DEFAULT '0',
      `keep_logged_token` char(75) DEFAULT NULL,
      `register_date` datetime NOT NULL,
      `last_login` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
    
    DELETE FROM `users`;
    INSERT INTO `users` (`id`, `first_name`, `last_name`, `email`, `role`, `password`, `keep_logged_token`, `register_date`, `last_login`) VALUES
        (1, 'Test', 'Example', 'test@example.de', 3, '', '', '2018-08-22 07:46:20', '2018-08-23 07:46:20');
    Nun versuche ich mit mysqli den Datensatz zu überschreiben, test.php
    PHP-Code:
    ...
    private function 
    updateUserOnLogin() {

            
    $id 1;
            
    $name 'Rammi';

            try {
                
    $sql "UPDATE users SET `first_name` = ? WHERE `id` = ?;";
                
    $stmt $this->conn->prepare($sql);
                
    $stmt->bind_param('si'$name$id);
                if(!
    $stmt->execute()) {
                    throw new \
    Exception($stmt->error);                
                }
                die(
    'Klasse!');
            } catch (\
    Exception $e) {
                
    var_dump($e->getMessage());
                die();
            }

        }
    ... 
    Als Ergebnis bekomme ich 'Klasse!', also das ->execute() gibt true zurück, aber in der Datenbank ändert sich am Datensatz nix....

    Warum?

    Gruss

  • #2
    Mach mal:

    PHP-Code:
    mysqli_report(MYSQLI_REPORT_ERROR MYSQLI_REPORT_STRICT); 
    rein. Und probiers nochmals aus.

    Kommentar


    • #3
      Zitat von jonas3344 Beitrag anzeigen
      Mach mal:...
      Ist alles an und funktioniert auch, wenn ich ein falsches Feld angebe beispielsweise, bekomme ich die korrekte Fehlermeldung.
      Auch das ->execute in einem var_dump() gibt true zurück. SELECT Abfrage funktioniert ohne Probleme...

      Kommentar


      • #4
        Und

        PHP-Code:
        var_dump($stmt)? 

        Kommentar


        • #5
          Zitat von jonas3344 Beitrag anzeigen
          Und

          HTML-Code:
          [PHP]var_dump($stmt)?[/PHP]
          HTML-Code:
          object(mysqli_stmt)#274 (10) {
          ["affected_rows"]=>
          int(1)
          ["insert_id"]=>
          int(0)
          ["num_rows"]=>
          int(0)
          ["param_count"]=>
          int(2)
          ["field_count"]=>
          int(0)
          ["errno"]=>
          int(0)
          ["error"]=>
          string(0) ""
          ["error_list"]=>
          array(0) {
          }
          ["sqlstate"]=>
          string(5) "00000"
          ["id"]=>
          int(3)
          }

          Kommentar


          • #6
            Das spricht alles dafür, dass sich in der Datenbank etwas geändert haben sollte.

            Kommentar


            • #7
              Zitat von jonas3344 Beitrag anzeigen
              Das spricht alles dafür, dass sich in der Datenbank etwas geändert haben sollte.
              Jo....aber es ändert sich nix, deshalb meine Frage hier )

              Kommentar


              • #8
                Ok sorry, so ein Freitagabend Fehler...autocommit war abgeschaltet.

                Trotzdem Danke

                Gruss Rammi

                Kommentar

                Lädt...
                X