My_sql fehler ohne "error"
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
absenden
anfrage
anweisung
code
datenbank
ende
erstellen
fehler
funktion
helfen
limit
links set
null
nummer
objekt
ordern
statement
stelle
update
verbindung
-
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(); ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Was sollte sich denn dort tun?
ich bin nicht mit der funktion: $query->bindParam vertraut, aber ansonsten sehe ich keine ausgabe... -
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
-
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 '<pre>'; var_dump($verbindung, $query, $query-execute() ); echo '</pre>';
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 -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage