Aktueller Standort: Startseite> Neueste Artikel> Wie kann festgestellt werden, ob der Rückgabewert von MySQLI_STMT :: $ Insert_id gültig oder abnormal ist?

Wie kann festgestellt werden, ob der Rückgabewert von MySQLI_STMT :: $ Insert_id gültig oder abnormal ist?

gitbox 2025-09-30

Bei Verwendung von PHP-Erweiterung von PHP für Datenbankvorgänge wird MySQLI_STMT :: $ Insert_id hauptsächlich verwendet, um die automatische Inkrement-ID zu erhalten, die durch den letzten Einfügungsvorgang generiert wird. Normalerweise gibt $ Insert_id bei der Durchführung eines Einfügungsvorgangs einen Ganzzahlwert zurück, der die ID des gerade eingefügten Datensatzes darstellt. Wenn die Einfügung fehlschlägt, gibt sie normalerweise 0 oder andere abnormale Werte zurück. Wie können Sie in der tatsächlichen Entwicklung feststellen, ob der Rückgabewert von MySQLI_STMT :: $ Insert_id gültig ist oder ob eine Ausnahme auftritt?

1. Die grundlegende Funktion von MySQLI_STMT :: $ Insert_id

MySQLI_STMT :: $ Insert_id ist ein Attribut des MySQLI_STMT- Objekts, das die automatische Inkrement-ID speichert, die durch die neueste Einfügungsoperation generiert wird, die von dieser Anweisung durchgeführt wird. Typische Fälle seines Rückgabewerts sind:

  • Einfügen erfolgreich ein und es gibt ein automatisches Inkrementfeld: Gibt die automatische Inkrement-ID des Einfügendatensatzes zurück.

  • Einfügen fehlgeschlagen: Return 0 , was angibt, dass die Einfügung nicht erfolgreich ist, und normalerweise bedeutet die automatische Inkrement-ID nicht.

  • Einfügen ohne automatische Inkrement-Feld einfügen: In keiner Weise des automatischen Inkrementssatzes wird Insert_id 0 zurückgegeben, da keine ID generiert wird.

2. Bestimmen Sie, ob mySQLi_stmt :: $ insert_id gültig ist

Um festzustellen, ob der Rückgabewert von MySQLI_STMT :: $ Insert_id gültig ist, müssen Sie zwei wichtige Punkte verstehen:

  • Bestimmt, ob der Rückgabewert 0 ist.

  • Stellen Sie fest, ob der Einfügungsvorgang erfolgreich ist.

2.1 Bestimmen Sie, ob der Rückgabewert 0 ist

Wenn der Einsatzvorgang erfolgreich ist und ein automatisches Inkrementfeld beteiligt ist, sollte $ Insert_id eine Ganzzahl von mehr als 0 zurückgeben. Wenn es 0 ist, können die folgenden Situationen auftreten:

  1. Einfügen der Operation fehlgeschlagen (z. B. SQL -Fehler, Einschränkungskonflikte usw.).

  2. Die aktuelle Tabelle hat kein automatisches Inkrementfeld.

  3. Die Einfügung war erfolgreich, aber die Tabelle umfasste nicht das automatische Inkrementfeld (z. B. das Feld ohne die Einstellung auto_increment ).

Daher ist es sehr wichtig zu bestimmen, ob $ insert_id 0 ist, aber dies kann jedoch nicht vollständig bestätigen, ob die Einfügung erfolgreich ist.

2.2 Bestimmen Sie, ob der Einfügungsvorgang erfolgreich ist

Um genau zu bestimmen, ob der Einfügungsvorgang erfolgreich ist, verwenden Sie zusätzlich zu $ ​​Insert_id den Rückgabewert von MySQLI_STMT :: Execute () oder MySQLI_STMT :: Affection_rows, um weiter zu bestätigen.

  • MySQLI_STMT :: EXECUTE () : Return True Means EXECution ist erfolgreich, falsche Mittelwerte Die Ausführung ist fehlgeschlagen.

  • MySQLI_STMT :: AffeCT_ROWS : Gibt die Anzahl der betroffenen Zeilen zurück. Wenn es 0 ist, bedeutet dies, dass kein Datensatz eingefügt wurde. Auch wenn die SQL -Anweisung erfolgreich ausgeführt wird, kann der Einfügungsvorgang nicht als gültig angesehen werden.

3.. Handle Insertion Failure

In der tatsächlichen Entwicklung begegnen wir in der Regel Situationen, in denen die Einfügungsoperation fehlschlägt, z. B. Verstößen gegen Einschränkungen, Fehlanpassungstypen usw. Um das Problem genau zu beurteilen, können Sie MySQLI_STMT :: $ Insert_id und Mysqli_stmt :: Fehler kombinieren, um detailliertere Fehlerinformationen zu erhalten.

3.1 Beispielcode: Einfügen und überprüfen Sie die ID

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Erstellen Sie eine Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);

</span><span><span class="hljs-comment">// Überprüfen Sie, ob die Verbindung erfolgreich ist</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Vorbereiten SQL Stellungnahme</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO my_table (name, age) VALUES (?, ?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"si"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>);

</span><span><span class="hljs-comment">// Parameter binden und ausführen</span></span><span>
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">"John"</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
    </span><span><span class="hljs-comment">// Ausführung erfolgreich,prüfen insert_id</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;insert_id &gt; </span><span><span class="hljs-number">0</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Erfolgreich einfügen,Generiert ID Ja: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;insert_id;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Erfolgreich einfügen,Es wird jedoch kein automatisches Inkrement generiert ID。"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-comment">// Ausführung fehlgeschlagen,Ausgabefehlermeldung</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Einfügen fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error;
}

</span><span><span class="hljs-comment">// Schließung statement und verbinden</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Im obigen Code prüfen wir nach der Einfügung zuerst $ STMT-> Insert_id . Wenn der Rückgabewert größer als 0 ist, bedeutet dies, dass die Einfügung erfolgreich ist und eine automatische Inkrement -ID generiert wird. Wenn der Rückgabewert 0 beträgt, kann der Einfügungsvorgang fehlgeschlagen sind oder die eingefügte Tabelle kein automatisches Inkrement -Feldsatz hat.

3.2 Verwenden Sie MySQLI_STMT :: Affection_rows, um die Anzahl der betroffenen Zeilen zu überprüfen

Vor dem Überprüfen von Insert_ID ist es am besten, betroffene_rows zu verwenden, um weiter zu bestimmen, ob der Einsatz tatsächlich ausgeführt wird.

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;affected_rows &gt; </span><span><span class="hljs-number">0</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Erfolgreich einfügen,Generiert ID Ja: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;insert_id;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Einfügen fehlgeschlagen:Es wird kein Datensatz eingefügt。"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Ausführung fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error;
}
</span></span>

4. Ausnahmebehandlung

Um Ausnahmen zuverlässig zu erfassen, kann der Versuchs-Catch verwendet werden, um mögliche Datenbankverbindungsfehler oder SQL-Fehler festzuhalten. Obwohl MySQLI selbst den Try-Catch -Mechanismus nicht unterstützt, können wir Ausnahmen in benutzerdefinierten Verarbeitungsmethoden zusammenfassen.

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO my_table (name, age) VALUES (?, ?)"</span></span><span>);
    </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"si"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>);

    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
        </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">Exception</span></span><span>(</span><span><span class="hljs-string">"Einfügen fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error);
    }

    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;insert_id &gt; </span><span><span class="hljs-number">0</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Erfolgreich einfügen,Generiert ID Ja: "</span></span><span> . </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;insert_id;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Erfolgreich einfügen,Es wird jedoch kein automatisches Inkrement generiert ID。"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Ausnahmen fangen: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>

5. Zusammenfassung

Um festzustellen, ob mySQLI_STMT :: $ Insert_id gültig ist, können wir uns nicht nur darauf verlassen, ob der Rückgabewert 0 beträgt, und wir müssen auch kombinieren, ob der Einfügungsvorgang erfolgreich ist und ob die Tabellenstruktur automatische Inkrementfelder aufweist. Um die Richtigkeit des Vorgangs zu gewährleisten, wird empfohlen, den Rückgabewert von Execute () und AffeCT_Rows gleichzeitig zu überprüfen und mögliche Fehler durch geeignete Ausnahmebehandlungsmechanismen zu erfassen, wodurch ein effektives Fehlerfeedback und die Verarbeitung von effektivem Fehler vorgenommen werden.