Mailinglisten-Archive |
Jörn Grube schrieb:
> Christian Knorr schrieb:
>> Am Samstag 28 Juni 2008 22:06:12 schrieb Daniel Lüdeking:
>>> 2147483647 ist der maximale Wert für den Datentyp Integer.
>>> Die Lösung ist deshalb - wie schon erwähnt - das Heranziehen einer
>>> weitaus kleineren ID. Ich empfehle nochmals 1 bis n via auto_increment.
> ...
>> Ist am Code was falsch?
>>
>> {
>> $sql = "INSERT INTO prefix_value (value_id,value_entry,...n)
>> VALUES ('0','$_POST[entry]',...n)";
>> }
> ...
>
> auto_increment kann nicht 0 (Null) sein. Man kann die DB zwar zwingen
> auch einen Wert 0 zu akzeptieren, allerdings sagt das "auto" von
> auto_increment ja mehr oder weniger schon aus, dass der passende Wert
> von der DB selbst gesetzt wird.
nicht wenn man den Wert vorgibt, und 0 kann man da ebenfalls vorgeben, hängt
aber von der Server-Konfiguration ab
NO_AUTO_VALUE_ON_ZERO
> Und in einer Antwort wurde bereits
> erwähnt, dass Du statt '0' einfach '' benutzen solltest. Ich schreib das
> hier nur zu Deinem besseren Verständnis :)
'' wäre ein leerer String, einen String in ein numerisches Feld einzutragen
ist ein Fehler, welcher von MySQL automatisch korrigiert wird, aber nicht in
allen SQL_MODEs, kann also WARNINGS oder sogar ERRORS erzeugen
wenn er den auto_increment Wert verwenden will muss er entweder NULL als
Wert angeben oder besser das Feld überhaupt nicht angeben.
Wahrscheinlich ist einfach sein next autoincrement value bereits zu hoch,
das sieht er aber wenn er ein SHOW CREATE TABLE macht
alleine den Wert mittels ALTER TABLE tbl AUTO_INCREMENT = 0; wieder
zurückzusetzen hilft aber nicht, da dieser beim nächsten mal automatisch
wieder auf den momentan höchsten Wert in der PK-Spalte + 1 gesetzt wird
d. h. er muss erst seine Werte in der PK Spalte korrigieren (eventuell
einfach löschen) dann am besten das FELD auf UNSIGNED BIGINT AUTO_INCREMENT
und nen PK da drauf ändern
--
Sebastian Mendel
php::bar PHP Wiki - Listenarchive