kostenloser Webspace werbefrei: lima-city


My_sql fehler ohne "error"

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    a************n

    ich wollte mein menu aus der datenbank auslesen lassen... und das sollte die funktion sein die alles aktualiesiert
    die datei function.db_connect.php baut die verbindung zur Datenbank auf.
    das ist mein pfad: ?name0=Main&name1=Buch&order0=2&order1=1&id0=1&id1=2
    tabellen konfiguration:
    id int(8) unsigned not_null auto_increment Primary
    name varchar(100) not_null

    ich bekomme keine fehlermeldung aber es tut sich einfach nichts (in der db)
    <?
    function menu() {
    	$i = 0;
    	while(!empty($_GET['name'.$i])) {
    		$name[$i] = $_GET['name'.$i];
    		$i++;
    	}
    	$i = 0;
    	while(!empty($_GET['order'.$i])) {
    		$order[$i] = $_GET['order'.$i];
    		$i++;
    	}
    		$i = 0;
    	while(!empty($_GET['id'.$i])) {
    		$order[$i] = $_GET['id'.$i];
    		$i++;
    	}
    	
    	require './function.db_connect.php';
    	
    	$sql = "UPDATE links Set id = :id AND name = :name WHERE id = :id_old LIMIT 1";//prepared statement erstellen
    	$query = $verbindung->prepare($sql); //PS absenden
    
    	for($j = 0; $j < count($name); $j++) {
    	$query->bindParam( ':id', $order[$j] );
    	$query->bindParam( ':name', $name[$j] );
    	$query->bindParam( ':id_old', $id[$j] );
    	}
    	if($query->execute() == false)//anfrage durchführen
    	{
    		echo "Fehler bei nummer ".$j;
    		die(mysql_error());
    	}
    
    	$result = null;
    	$query = null; // abfarge löschen
    	$verbindung = null;  //verbindung schließen
    }
    menu();
    ?>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Was sollte sich denn dort tun?
    ich bin nicht mit der funktion: $query->bindParam vertraut, aber ansonsten sehe ich keine ausgabe...
  4. Hmm, da es eine selbst geschriebene Klasse ist, die die Verbindung zur DB aufbaut, können wir dir nicht wirklich helfen :-(
    An deiner Stelle würde ich mir nur mal die ganzen Objekte ausgeben lassen:
    // mal ans Ende der Funktion bevor die Variablen gelöscht werden ;-)
    echo '<pre>';
    var_dump($verbindung, $query, $query-execute() );
    echo '</pre>';


    Grüßle
  5. Autor dieses Themas

    a************n

    scout schrieb: Hmm, da es eine selbst geschriebene Klasse ist, die die Verbindung zur DB aufbaut, können wir dir nicht wirklich helfen :-(
    An deiner Stelle würde ich mir nur mal die ganzen Objekte ausgeben lassen:
    // mal ans Ende der Funktion bevor die Variablen gelöscht werden ;-)
    echo '&lt;pre&gt;';
    var_dump($verbindung, $query, $query-execute() );
    echo '&lt;/pre&gt;';


    Grüßle

    und da entshand der fehler
    Fatal error: Call to undefined function execute() in C:\xampp\htdocs\sharks\functionen\function.menu_update.php on line 38
    ach und ich hab die for schleife jetzt auch nach der if-anweisung geschlossen


    ich hab probiert alles jetzt mit prepeareds statement zu machen aber da das nicht wirklich will lass ich es lieber und mache alles wie gehabt....

    mfg andré

    Beitrag zuletzt geändert: 19.1.2009 15:34:07 von andre-morillon
  6. Ok hab gerade erst mitbekommen dass es ja MySQLi ist und hab auch schon ein paar Fehler entdeckt.
    Zum Bsp. gibt es keine Funktion BindParam() sondern nur Bind_Param().
    Ein Update SQL Statement gibt es auch nicht mit "Limit 1". Du mußt da schon genau den Datensatz angeben den du updaten willst.
    Ich schau mal was ich noch so finde...

    Grüßle

    Edit: also hab mal eine funktionierene Variante gemacht:
    <?php
    
    function menu() {
        $i = 0;
        while(!empty($_GET['name'.$i])) {
            $name[$i] = $_GET['name'.$i];
            $i++;
        }
        $i = 0;
        while(!empty($_GET['order'.$i])) {
            $order[$i] = $_GET['order'.$i];
            $i++;
        }
            $i = 0;
        while(!empty($_GET['id'.$i])) {
            $id[$i] = $_GET['id'.$i];
            $i++;
        }
        
        $verbindung = mysqli_init();
        $verbindung->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
        $verbindung->real_connect("localhost", "root", "", "test");
    
        /* check connection */
        if (mysqli_connect_errno()) {
            printf("Verbindungsfehler:: %s\n", mysqli_connect_error());
            exit();
        }
    
        
        $sql = "UPDATE links Set nr = ?, name = ? WHERE id = ?;"; //prepared statement erstellen
        $query = $verbindung->prepare($sql); //PS absenden
    
        for($j = 0; $j < count($name); $j++) {
            // 1. Parameter = Typangebe (i = Integer, d=double, s=String, b=Blob)
            // 2. -... Parameter - die Werte der Parameter im SQL-String (der Reihe nach)
            $query->bind_param( 'isi', $order[$j], $name[$j], $id[$j] );  
    
            if($query->execute() == false)//anfrage durchführen
            {
                echo "Fehler bei nummer ".$j.": ";
                die($query->error);
            }
        }
        
        $verbindung->close();
        $result = null;
        $query = null; // abfarge löschen
        $verbindung = null;  //verbindung schließen
    }
    
    // #### Hauptprogramm #####
    
    for($i=0; $i<10; $i++) {
        $_GET['name'.$i] = "Test$i";
        $_GET['order'.$i] = "Order$i";
        $_GET['id'.$i] = $i+1;
    }
    
    menu();
    
    ?>


    Weiß jetzt nicht genau ob es das ist was du willst, da einfach zu viele Fehler drin waren. Allein das SQL Statement strotzte for syntaktischen Fehlern. Achja und falls id ein Primaryindex ist, geht das schonmal nicht, weil du da unter Umständen ein Duplicate Key bekommst und die SQL Anweisung nicht angenommen wird.

    Nunja wenn du mit bissl mehr Details rausrückst, kann ich dir weiterhelfen.
    Kannst auch per PN schreiben, falls du nicht alles veröffentlichen willst :o)

    Beitrag zuletzt geändert: 19.1.2009 20:07:29 von scout
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!