Hallo,
Und zwar ändert die Variable $newid ihren Typ von integer zu NULL und ich verstehe weder wieso noch wie ich es verhindern kann.
$sql="SELECT MAX(id
) FROM category
" ;
$sql=mysql_query($sql);
$newid = 0;
echo "var: ".gettype($newid)."<br />"; //integerwhile($unter=mysql_fetch_array($sql)){
$newid = $unter[id];
Achso, ja: Deine Abfrage enthält keine Spalte mit dem Namen id, deswegen enthält die Variable $unter auch keinen Schlüssel mit dem Wert 'id' (Du hast die Anführungszeichen zusätzlich noch vergessen). Daher der NULL-Wert.
display_errors = ALL
hätte Dir weitergeholfen.
Du kannst mit einem Aliasnamen dafür sorgen, dass es im Abfrageergebnis eine Spalte mit dem Namen id gibt:
[code lang=sql]SELECT
MAX(id) id
FROM
category
a) ich halte es in den seltensten Fällen für eine gute Idee, den Namen einer
vorhandenen Spalte als Aliasnamen zu gebrauchen,
b) könntest Du mit dem Einsatz von [COALESCE()](http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_coalesce) den Test auf 0 vermeiden:
~~~sql
SELECT
COALESCE(MAX(id), 0) newid -- Achtung: Spalte heißt jetzt "newid"
FROM
category
liefert immer eine Zahl zurück, auch wenn es noch gar keine id in der
Tabelle ist
c) ist eine automatisch generierte id die bessere Wahl, z.B. AUTO_INCREMENT.
Freundliche Grüße
Vinzenz