Während der PHP -Entwicklung kann die Verwendung von MySQLI -Erweiterungsvorverhandlungsanweisungen die SQL -Injektion effektiv verhindern und die Sicherheit und Effizienz von Datenbankvorgängen verbessern. Mysqli_stmt :: attr_get ist eine Funktion in MySQLI, mit der die Eigenschaften der Vorverarbeitungsanweisungen erhalten werden, und wird häufig zum Debuggen und Steuerungsdetails verwendet.
In einigen älteren PHP -Umgebungen kann die Funktion mySQLI_STMT :: attr_get jedoch Probleme mit Instabilität oder Unversorgungen aufweisen, was zu Ausnahmen oder Nicht funktionsfähiger Funktionen führt. In diesem Artikel wird eine praktische Lösung veröffentlicht, um sicherzustellen, dass MySQLI_stmt :: attr_get stabil in Legacy -PHP -Umgebungen funktioniert.
Die MySQLi_stmt :: Attr_get -Funktion wird nur in PHP 5.3 und höher unterstützt. Wenn Ihre Umgebung früher ist oder die MySQLI -Erweiterung nicht vollständig aktiviert ist, wird beim Aufrufen dieser Methode ein Fehler oder eine Verhaltensausnahme gemeldet.
Daher besteht der erste Schritt darin, die PHP -Version und die Erweiterungsunterstützung zu überprüfen:
if (version_compare(PHP_VERSION, '5.3.0', '<')) {
die('aktuell PHP Version nicht unterstützt mysqli_stmt::attr_get Funktion。');
}
if (!extension_loaded('mysqli')) {
die('Nicht geladen MySQLi Erweitert,nicht verfügbar mysqli_stmt::attr_get。');
}
Verwenden Sie vor dem Aufrufen von Attr_get die Erkennung von Funktionen oder Methoden zur Existenz, um Programmabstürze aufgrund der Nichtbelegung der Funktion zu vermeiden:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (method_exists($stmt, 'attr_get')) {
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo "aktuellAttributwert: " . $attr;
} else {
echo "aktuell环境Nicht unterstützt attr_get Verfahren,Überspringen Sie diesen Vorgang。";
}
Auf diese Weise kann das Programm auch in alten Versionen von PHP sicher ausgeführt werden und wird keinen Fehler melden, da die Methode nicht gefunden werden kann.
Wenn Sie einige Attribute erhalten müssen, attr_get jedoch nicht verfügbar ist, können Sie alternative Logik basierend auf Ihren Anforderungen entwerfen. Beispielsweise können die Werte bestimmter Eigenschaften durch Ausführen der entsprechenden SQL -Anweisung oder Konfigurationsparameter erhalten werden:
// Angenommen, Sie müssen das Attribut der maximalen Länge erhalten,Sie können stattdessen Standardwerte verwenden oder Konfiguration abfragen
$update_max_length = defined('MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH') ? MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH : null;
if ($update_max_length === null) {
// Alte Version PHP Nicht in der Lage zu bekommen,Stellen Sie einen angemessenen Standardwert manuell fest
$update_max_length_value = 1024;
} else {
$update_max_length_value = $stmt->attr_get($update_max_length);
}
echo "Aktualisieren Sie den Attributwert der maximalen Länge auf: " . $update_max_length_value;
Obwohl die obige Methode die Stabilität des Codes in gewissem Maße sicherstellen kann, ist das Upgrade auf eine PHP -Version, die MySQLi_stmt :: attr_get unterstützt, eine bessere Wahl. Erwägen Sie zusätzlich, dass Sie PDO- oder Drittanbieter-Datenbank-Abstraktionsschichtbibliotheken verwenden, die eine bessere Handhabung der Kompatibilität aufweisen.
$mysqli = new mysqli('m66.net', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("Die Vorverarbeitung schlug fehl: " . $mysqli->error);
}
$id = 1;
$stmt->bind_param('i', $id);
if (method_exists($stmt, 'attr_get')) {
$attr_value = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo "Attributwert: " . $attr_value;
} else {
echo "attr_get Nicht unterstützt,über etwas springen。";
}
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$stmt->close();
$mysqli->close();