Hallo,
ich habe folgendes Problem bei einem Update eines Integer-Feldes in der mySQL DB.
Installierte Versionen:
- PHP Version 5.3.8
-mySQL 5.0.8
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.