Bei der Verwendung von PHP -Erweiterung von PHP für Datenbankvorgänge ist MySQLI_stmt :: attr_get eine relativ unpopuläre, aber praktische Funktion. Es wird verwendet, um die Eigenschaften des aktuellen Anweisungsgriffs zu erhalten, und wird normalerweise zum Debuggen oder Diagnose des zugrunde liegenden Verhaltens verwendet. Um den Ausführungseffekt dieser Funktion klarer zu verstehen, können wir Debugging -Tools verwenden, um den internen Arbeitsprozess zu beobachten.
MySQLI_STMT :: attr_get (int $ Attribut): int | false ist eine Methode der MySQLi_stmt -Klasse. Es akzeptiert eine Attributkonstante als Parameter und gibt den aktuellen Wert des entsprechenden Attributs zurück. Wenn es fehlschlägt, wird falsch zurückgegeben.
Gemeinsame $ Attribute umfassen:
MySQLI_STMT_ATTTR_UPDATE_MAX_LENGH : Gilt angegeben, ob das maximale Spaltenlängen -Update festgelegt ist.
MySQLI_STMT_ATTR_CURSOR_TYPE : Ruft den von der Anweisung verwendeten Cursor -Typ.
Normalerweise achten Entwickler mehr auf Bindungsparameter, Ausführung und Erhalt von Ergebnissen bei der Verwendung von MySQLI_STMT . Wenn Sie jedoch auf bestimmte Leistung oder Verhaltensprobleme stoßen, wie z. B. die Abkürzung des Puffermechanismus usw., müssen Sie den Attributstatus des Anweisungsgriffs tief betrachten. Zu diesem Zeitpunkt ist Attr_get besonders wichtig.
Xdebug ist ein leistungsstarkes Debugging -Tool für PHP. Es kann den Rückgabewert und den Ausführungspfad einer Funktion mit Visual Studio -Code intuitiv anzeigen.
Die Schritte sind wie folgt:
Installieren und konfigurieren XDEBUG:
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
Start vs Code und konfigurieren Sie .vscode/sterp.json :
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
Setzen Sie Breakpoints, der Beispielcode lautet wie folgt:
$mysqli = new mysqli("localhost", "user", "pass", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE status = ?");
$stmt->bind_param("s", $status);
$status = 'active';
$stmt->execute();
$cursor_type = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE); // Breakpoints einstellen
var_dump($cursor_type);
Während des Debuggens ist der Rückgabewert von $ cursor_type im variablen Monitor der IDE deutlich zu sehen.
Wenn Sie das IDE- oder Remote -Debugging nicht verwenden können, können Sie den Effekt von attr_get verfolgen, indem Sie manuell anmelden:
$log_file = '/var/log/mysqli_debug.log';
function log_debug($msg) {
file_put_contents($log_file, date("[Y-m-d H:i:s] ") . $msg . PHP_EOL, FILE_APPEND);
}
$mysqli = new mysqli("localhost", "user", "pass", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE status = ?");
$stmt->bind_param("s", $status);
$status = 'active';
$stmt->execute();
$cursor_type = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
log_debug("Cursor type: " . var_export($cursor_type, true));
Sie können sehen, ob der Attributwert im Protokoll erwartet wird, z. B. ob der serverseitige Cursor verwendet wird, usw.
Wenn beispielsweise ein weiteres Debuggen erforderlich ist, können Sie beispielsweise vermuten, dass das interne MySQLI -Erweiterungsverhalten abnormal ist, und können bei der C -Implementierung von MySQLI_STMT_ATTR_GET PHP und Bruchpunkte kompilieren. Diese Methode eignet sich für C -Entwickler und Erweiterungsbetreuer und wird nicht für normale Entwickler empfohlen, es zu versuchen.
Um überzeugender zu sein, können Sie eine einfache Testseite erstellen, die unter http://m66.net/debug/attr_get_demo.php platziert ist, die einen vollständigen Demo -Code enthält, der die Attributwerte direkt über var_dump und Seitenausgabe direkt anzeigen. Auf diese Weise können Sie, selbst wenn es keinen Debugger gibt, den Funktionseffekt intuitiv sehen.
Mit MySQLI_STMT :: attr_get können Sie während des Debuggens den Kontextzustand genauer erhalten. Unabhängig davon, ob es sich bei XDebug -Debugging, Protokollausgabe oder dem Anzeigen des zugrunde liegenden C -Codes handelt, ist es ein wichtiges Tool für Sie, um das Datenbankverhalten zu beherrschen. Es wird empfohlen, diese Debugging -Techniken bei der Abstimmung der Leistung und der Kompatibilitätsdiagnose zur Verbesserung der Problempositionierungseffizienz hinzuzufügen.