PHP / mySQL - Update
Banzak
- php
3 dedlfix
Hallo,
ich habe folgendes Problem bei einem Update eines Integer-Feldes in der mySQL DB.
Installierte Versionen:
Das ist die Funktion die den Sortierungswert ändert und in die DB schreibt.
function sortIBS($ibs_pro_id,$ibs_id,$direction)
{
$db = new DB_Test();
$db1 = new DB_Test();
$db2 = new DB_Test();
//## Suchen des betroffenen Elements
$query="SELECT ibs_sort FROM tab_ibs WHERE ibs_id=".$ibs_id;
$db->query($query);
$db->next_record();
if($db->f("ibs_sort") && $direction==up)
{
echo $query1="SELECT ibs_id FROM tab_ibs WHERE ibs_sort=".($db->f("ibs_sort")-1)." AND ibs_pro_id=".$ibs_pro_id;
$db1->query($query1);
$db1->next_record();
//## Ändern des 1sten Elements
echo $query2="UPDATE tab_ibs SET ibs_sort=6 WHERE ibs_id=".$ibs_id;
echo "<br>";
$db2->query($query2);
while($db2->affected_rows()==-1)
{
$db2->query($query2);
}
//## Ändern des 2ten Elements
echo $query2="UPDATE tab_ibs SET ibs_sort=7 WHERE ibs_id=".$db1->f("ibs_id");
echo "<br>";
$db2->query($query2);
while($db2->affected_rows()==-1)
{
$db2->query($query2);
}
}
if($db->f("ibs_sort") && $direction==down)
{
echo $query1="SELECT ibs_id FROM tab_ibs WHERE ibs_sort=".($db->f("ibs_sort")+1)." AND ibs_pro_id=".$ibs_pro_id;
echo "<br>";
$db1->query($query1);
$db1->next_record();
//## Ändern des 1sten Elements
echo $query2="UPDATE tab_ibs SET ibs_sort=(ibs_sort+1) WHERE ibs_id=".$ibs_id;
echo "<br>";
$db2->query($query2);
//echo "Anzahl Einträge".mysql_affected_rows()."<br>";
while($db2->affected_rows()==-1)
{
$db2->query($query2);
}
//## Ändern des 2ten Elements
echo $query2="UPDATE tab_ibs SET ibs_sort=(ibs_sort-1) WHERE ibs_id=".$db1->f("ibs_id");
echo "<br>";
$db2->query($query2);
//echo "Anzahl Einträge".mysql_affected_rows()."<br>";
while($db2->affected_rows()==-1)
{
$db2->query($query2);
}
}
}
Das ist die Ausgabe für die beiden Update-Anweisungen:
UPDATE tab_ibs SET ibs_sort=6 WHERE ibs_id=48
UPDATE tab_ibs SET ibs_sort=7 WHERE ibs_id=49
Und das ist das Ergebnis in der DB:
ibs_id ibs_pro_id ibs_sort
48 5 6
49 5 7
50 5 7
Er schreibt also für das obige Beispiel den Wert für 48 und 49 korrekt, nur weiß ich nicht warum er den Wert für 50 ändert...
Feldtyp für ibs_sort tinyint
Komischerweise schreibt er Werte in z.b. ibs_desc richtig, er macht nur Probleme wenn ich das Feld ibs_sort schreiben möchte... slebst wenn ich die sql hardcoded schreibe geht es nicht...
Das mit dem feld ibs_desc habe ich hardcode in den quelltext geschrieben, das ging....
Danke für Eure Hilfe.
Tach!
Danke für Eure Hilfe.
Dazu musst du sie uns erst einmal möglich mnachen. Du zeigst zwar eine Menge Code, der aber nicht nachvollziehbar ist, weil er Aufrufe unbekannter Funktionen/Methoden enthält. Du gibst auch keine Werte an, mit der die Funktion aufgerufen wird. Sowohl die Tabellenstuktur als auch der Inhalt der relevanten Datensätze fehlt. Und du bist sehr ungenau mit der Eingrenzung des Problems. Vermutest du, dass es sich um ein DBMS-Problem handelt, dann spar dir und uns den PHP-Code. Vermutest du ein Problem beim Erstellen der Querys, also im PHP-Code selbst, dann ermittle bitte mit Kontrollausgaben die genaue Stelle, an der Wunsch und Wirklichkeit auseinanderlaufen. Überprüfe nicht nur die Querys sondern auch die anderen Variableninhalte.
dedlfix.