Bei der Verwendung von PHPs MySQLI -Erweiterung wird die Funktion mySQLI_STMT :: attr_get verwendet, um den Attributwert des vorverarbeiteten Anweisungsobjekts zu erhalten. Viele Entwickler werden jedoch auf das Problem stoßen, dass sie den Eigenschaftswert beim Aufrufen dieser Funktion nicht korrekt erhalten können. In diesem Artikel wird die möglichen Ursachen dieses Phänoms eingehend analysiert und entsprechende Lösungen liefern.
Die MySQLI_STMT :: Attr_get -Methode wird verwendet, um die angegebenen Vorverarbeitungsattribute zu erhalten, die normalerweise von MySQLi_stmt :: attr_set festgelegt werden. Gemeinsame Eigenschaften sind:
Mysqli_stmt_attr_update_max_length
Mysqli_stmt_attr_cursor_type
Mysqli_stmt_attr_prefetch_rows
Lassen Sie uns ein einfaches Beispiel geben:
$mysqli = new mysqli('m66.net', 'user', 'password', 'database');
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
$cursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "Cursor Type: " . $cursorType;
Wenn alles einwandfrei funktioniert, sollte $ cursortype den Cursor -Wertwert zurückgeben.
Das Attribut wird nicht korrekt eingestellt
Attr_get kann nur Attributwerte erhalten, die über attr_set gesetzt wurden. Wenn das Attribut niemals festgelegt wird, gibt Attr_get einen falschen oder unerwarteten Wert zurück.
Einige Eigenschaften unterstützen nur das Schreiben, aber nicht das Lesen <br> Einige Eigenschaften werden nur geschrieben, und Attr_get kann ihre Werte nicht lesen, was zu ungültigen Renditen führt.
MySQLI -Treiberversionsbeschränkungen oder Fehler
Unterschiedliche Versionen der Unterstützung von PHP- und MySQLI -Treibern für Attribute sind nicht genau gleich, und einige Versionen von Attr_get haben möglicherweise Implementierungsfehler.
Falsche Attributkonstante oder Typ <br> Wenn die während des Anrufs übergebene Attributkonstante kein gültiges MySQLI_STMT_ATTR_* ist, wird er nicht gelesen.
Stellen Sie sicher, dass die Eigenschaften eingestellt sind <br> Stellen Sie vor dem Aufrufen von Attr_get sicher, dass das entsprechende Attribut mit attr_set korrekt eingestellt wurde. Zum Beispiel:
$stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 10);
$value = $stmt->attr_get(MYSQLI_STMT_ATTR_PREFETCH_ROWS);
Überprüfen Sie die PHP- und MySQLI -Versionen <br> Stellen Sie sicher, dass die von Ihnen verwendete PHP -Version und die MySQLI -Erweiterungen auf dem neuesten Stand sind, oder unterstützen Sie zumindest die Eigenschaften, die Sie verwenden möchten. Das Upgrade von PHP -Versionen löst normalerweise Kompatibilitätsprobleme.
Vermeiden Sie es, Attribute zu lesen und nur zu schreiben <br> Überprüfen Sie die offizielle Dokumentation, um zu bestätigen, ob das Zielattribut das Lesen unterstützt und das Lesen und Schreiben nur Attribute vermeiden kann.
Verwenden Sie Fehlerbehandlungs- und Debugging -Informationen <br> Überprüfen Sie nach dem Aufrufen von attr_get den Rückgabewert und verwenden Sie MySQLI_STMT_Error , um die Fehlermeldung zu erfassen, um das Problem zu finden:
$value = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
if ($value === false) {
echo "Failed to get attribute: " . $stmt->error;
}
Verwenden Sie Alternativen <br> Wenn Sie den Status bestimmter Attribute bestätigen müssen, können Sie in Betracht ziehen, Programmlogik oder Datenbankserverparameter zu verwenden, anstatt die Attribute direkt zu lesen.
MySQLI_STMT :: attr_get wird begrenzt, ob das Attribut festgelegt wurde, die PHP/MySQLI -Version und die Lese- und Schreibmerkmale des Attributs selbst. Wenn der Eigenschaftswert nicht erhalten werden kann, stellen Sie zunächst sicher, dass die Eigenschaft festgelegt wurde und die verwendete Version das Lesen der Eigenschaft unterstützt. Darüber hinaus sind ein angemessenes Fehlerbehebung und das Versions -Versions -Upgrade auch der Schlüssel zur Fehlerbehebung und Lösung von Problemen.
Verwandte Tags:
mysqli_stmt