Antworten auf deine Fragen:
Neues Thema erstellen

Mysql id +1

leonr

Noch nicht viel geschrieben

Hallo Leute,

Ich habe folgendes Problem, ich habe etwas gemacht wo man News schreiben kann. Und wo die Url angezeigt wird.
Jetzt das Problem.
Die url soll die ID haben und hat in der Datenbank den namen url und text.
Und wenn man News erstellt soll dies gleich in der datenbank stehen.

Also im Klartext: url = id +1 .

Lg Leon
 

leonr

Noch nicht viel geschrieben

AW: Mysql id +1

Das is mir klar.

aber ich wollte es das man beim Newseintragen immer den letzten zählt +1,

Danke trodzdem.

Lg Leon
 

leonr

Noch nicht viel geschrieben

AW: Mysql id +1

also ich habe ein Newssystem Programmiert.
aber wenn man neue erstellt soll in die datenbank eine url beispiel:
und dies soll eingetragen werden. also die 3 inderzeit wo das andere auch eingetragen wurde.

Lg Leon
 
E

ero1337

Guest

AW: Mysql id +1

Hm, bin mir nicht sicher ob ich das nun so richtig verstehe, da die Antwort ja eigentlich schon gegeben wurde.
Wenn du für jede neue url die du in deine Datenbank einpflegen willst auch eine neue id vergeben willst, dann brauchst du diese nicht mit übergeben sondern nur die url..
durch AI wird der rest automatisch erledigt..
Falls wir hier etwas falsch verstehen solltest du etwas genauer werden, evtl. mit Quelltext..
 

saila

Moderatorle

AW: Mysql id +1

also ich habe ein Newssystem Programmiert.
aber wenn man neue erstellt soll in die datenbank eine url beispiel:
und dies soll eingetragen werden. also die 3 inderzeit wo das andere auch eingetragen wurde.

Lg Leon

Hi,

was du vor hast, ergibt keinen Sinn. Zum einen würde dir wie schon genannt auto_increment die Zählung abnehmen und darüber hinaus müsstest du nicht darauf achten, was ist nun der letzte Eintrag.

Desweiteren wäre bei deinem Vorhaben die Problematik gegeben, dass z.B. bei zwei Newsverfassern, immer eine überschrieben wird. Den letztlich haben beide beim Start, eine neue Nachricht anzulegen, die gleiche ID.

Also wäre es sinnvoller, du würdest deine Logik noch einmal überdenken. Es reicht doch aus, wenn du einen form-action-parameter newentry=1 anhängst. Damit ist klar, es ist ein neuer Eintrag und du kannst problemlos den INSERT starten.
 
E

ero1337

Guest

AW: Mysql id +1

Falls du OOP programmierst ist lastInsertId() eine sehr gute Lösung, so mache ich es jedenfalls.
 

saila

Moderatorle

AW: Mysql id +1

Hi netbandit,

er meint sicherlich die interne mysql-methode: MySQL :: MySQL 5.0 Reference Manual :: 11.13 Information Functions

@ero1337,

erst mal Willkommen von mir. Das wird jetzt schwierig :)
Dein Beitrag ist zwar was den Lösungsansatz betrifft korrekt, allerdings unterstützt du eine "unkluge" Vorgehensweise, was das Handling einer Sql betrifft.

Ungeachtet dessen ist es nach wie vor schwachsinnig, auf diese Weise die ID's zu vergeben. Es führt letztlich zu Problemen. Ausgenommen wäre, wenn man die angefragte ID in der MySql blockt. Dann währe gewährleistet, dass hier die ID nicht doppelt vergeben wird. Eine andere Möglichkeit wäre noch, die Abgefragte ID beim Verfassen eines neues Thema/Beitrag oder was auch immer bereits einzutragen. Das wiederum wäre beim abesenden des Beitrags ein Update und kein Insert mehr. Aber genau dieses Vorgehen und umständliche entwickeln wird einem ja per auto_increment abgenommen!
 
E

ero1337

Guest

AW: Mysql id +1

Danke erstmal für den Hinweis und den Empfang, sehr schönes, umfangreiches und breit gefächertes Forum, wird mir sicher noch viel Freude bereiten. :)

Hab mich da vielleicht auch etwas falsch ausgedrückt in Bezug darauf wie ich lastInsertId() verwende (in Verbindung mit AI) bzw. würd ich gern nähere Informationen über die Nachteile haben.

Kann ja einfach mal ein Beispiel zeigen wie meine speicher-funktionen momentan aussehen.. Vielleicht bekomme ich noch ein paar nützliche Tipps..

PHP-Code:
PHP:
public function speichere(News $news)
        {
            if ($news->istNeu()) {
                $this->insert($news);
            } else {
                $this->update($news);
            }
        }
        
        public function insert(News $news)
        {
            $sql         = 'INSERT INTO news (titel, eintrag, erstellt_am, erstellt_von)
                           VALUES (?, ?, ?, ?)';
            $abfrage     = $this->db->prepare($sql);
            $daten       = array($news->getTitel(),
                                $news->getEintrag(),
                                $news->getErstelltam(),
                                $news->getErstelltvon());
            $abfrage->execute($daten);
            $news->setId($this->db->lastInsertId());
        }
        
        public function update(News $news)
        {
            $sql         = 'UPDATE news SET titel=? eintrag=? erstellt_am=? erstellt_von=? WHERE id=?';
            $abfrage     = $this->db->prepare($sql);
            $daten       = array($news->getTitel(),
                                $news->getEintrag(),
                                $news->getErstelltam(),
                                $news->getErstelltvon(),
                                $news->getId());
            $abfrage->execute($daten);
        }
istNeu() ist nur eine kleine Funktion die testet ob update oder insert verwendet werden soll. AI ist in dem Fall natürlich die ID..

PHP-Code:
PHP:
public function istNeu()
        {
            $test= true;
            if ($this->id > 0) {
                $test = false;
            }
            return $test;
        }
        
    }

lastInsertId() dient mir praktisch nur als Hilfe falls ich mal wissen möchte welche Id per AI erzeugt wurde..
 

saila

Moderatorle

AW: Mysql id +1

Ok, ich frage mal etwas dumm in die Welt hinaus. Was macht bei der Parameterübergabe der jeweiligen Funktion das
function name(News $news) {}
"News"?
Und in diesem Zusammenhang - hast du in einer Datei bei dir auch irgendwo direkt zu Beginn
error_reporting(E_ALL); stehen - wenn nicht setze das einmal ein.
 

lachender_engel

Aktives Mitglied

AW: Mysql id +1

Ich mache mal einen Vorschlag "umgekehrt":
Ich vermute Du brauchst die URL später für einen Link auf die News, richtig?!
Wenn Du so vorgehst, und zum Beispiel 200 News erstellt hast, bekommst Du Probleme, wenn sich z.B. die URL ändert.
Durch den AutoIncrement bekommt der Datensatz beim Schreiben schon automatisch eine neue ID.
Mein Tipp ist nun erst bei der Ausgabe die URL zusammen zu bauen.
Also URL + ID = Link.

Was hältst Du davon?
 

exo

Aktives Mitglied

AW: Mysql id +1

Also wenn du einfach die letzte Gespeicherte ID heraufinden willst, dann mach einfach folgendes Select:

PHP:
$SQL = mysql_query("SELECT id FROM news ORDER  BY id DESC limit 1");

das ganze als funktion wäre z.b:

PHP:
function getLastId(){
$SQL = mysql_fetch_array(mysql_query("SELECT id FROM news ORDER  BY id DESC limit 1"));

return $SQL['id'];
}

wenn du dann die funktion aufrufst bekommst du die letzte in der DB gespeicherte ID wieder raus (bevor du einen neue Speicherst) aber ansonsten würde ich auch einfach mysql_isert_id() nutzen um die ID abzuspeichern....
 

lachender_engel

Aktives Mitglied

AW: Mysql id +1

Ansonsten nimmst Du

PHP: mysql_insert_id - Manual

und lässt Dir einfach die letzte ID zurück geben.
Damit könntest Du nach dem Insert auch direkt ein Update auf den selben Datensatz schreibe.
Die ID vor dem Schreiben berechnen würd eich nicht machen!
Denn es kann sein, dass zur selben Zeit zwei Leute, unabhängig voneinander, News einstellen. Dann bekommst Du Probleme, wenn Deine Routine für beide Einträge die selbe ID berechnet ob wohl sie nacheinander geschrieben werden.
 

saila

Moderatorle

AW: Mysql id +1

Ansonsten nimmst Du

PHP: mysql_insert_id - Manual

und lässt Dir einfach die letzte ID zurück geben.
Damit könntest Du nach dem Insert auch direkt ein Update auf den selben Datensatz schreibe.
Die ID vor dem Schreiben berechnen würd eich nicht machen!
Denn es kann sein, dass zur selben Zeit zwei Leute, unabhängig voneinander, News einstellen. Dann bekommst Du Probleme, wenn Deine Routine für beide Einträge die selbe ID berechnet ob wohl sie nacheinander geschrieben werden.

Egal wie er es macht, sind zwei Leute am Werk, gibt es die doppelte ID. Deshalb kann man im Grunde die Vorschläge auch nicht unterstützen.
 

saila

Moderatorle

AW: Mysql id +1

Ist mir klar. Mir geht es darum im Grunde das korrekte Vorgehen zu nehmen und nicht eine Behelfslösung, welche seit php4 nicht mehr verwendet wird. Ich bin mir nicht mehr sicher, aber ich meine in PHP3 wäre diese Vorgehensweise erforderlich gewesen. Tja und da wir bereits bei php5.3 angekommen sind und auch in absehbarer Zeit php6 folgt, dürfte das ja wohl kein Thema mehr sein. Insbesondere dann nicht, wenn man über die MySql-Datenbank die ID automatisiert erhalten kann ohne unnötige DB-Anfragen ;)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.615
Beiträge
1.538.352
Mitglieder
67.526
Neuestes Mitglied
Winfriedtesmer
Oben