Heim >Datenbank >MySQL-Tutorial >PDO MySQL: Vorbereitete Anweisungen oder Abfragecache? Was sollten Sie priorisieren?
PDO MySQL: Nutzen Sie den Abfrage-Cache und die Sicherheit vorbereiteter Anweisungen
MySQL bietet sowohl native vorbereitete Anweisungen als auch Abfrage-Cache zur Optimierung und Sicherheit. Es stellt sich jedoch die Frage: Was sollte in PDO-Konfigurationen Priorität haben?
Entlarvung der Mythen
Die allgemeine Auffassung ist:
Diese Aussagen gelten jedoch möglicherweise nicht für aktuelle MySQL- und PHP-Versionen.
Leistung vs. Sicherheit
In Bezug auf die Leistung ermöglichen MySQL-Versionen 5.1.17 oder höher das Abfrage-Caching mit vorbereiteten Anweisungen. Daher ist es möglich, mit neueren MySQL- und PHP-Versionen sowohl Leistung als auch Sicherheit zu nutzen.
In Bezug auf die Sicherheit bieten native vorbereitete Anweisungen keinen zusätzlichen Schutz gegen SQL-Injection. PDO maskiert bereits Abfrageparameterwerte und dieser Prozess wird von der EMULATE_PREPARES-Einstellung nicht beeinflusst.
Fehlerberichterstattung
Native vorbereitete Anweisungen lösen während der Vorbereitung Syntaxfehler aus, während emulierte vorbereitete Anweisungen auftreten Anweisungen verschieben solche Fehler auf die Ausführungszeit. Dies wirkt sich auf den Code aus, den Sie schreiben, insbesondere mit PDO::ERRMODE_EXCEPTION.
Zusätzliche Überlegungen
Empfehlung
Für ältere MySQL- und PHP-Versionen wird empfohlen, vorbereitete Anweisungen zu emulieren. Für neuere Versionen sollten jedoch native vorbereitete Anweisungen verwendet werden (durch Ausschalten der Emulation).
Benutzerdefinierte PDO-Verbindungsfunktion
Unten finden Sie einen Codeausschnitt für eine PDO-Verbindung Funktion mit optimalen Einstellungen:
function connect_PDO($settings) { $emulate_prepares_below_version = '5.1.17'; $dsnpairs = []; foreach ($settings as $k => $v) { if ($v !== null) { $dsnpairs[] = "{$k}={$v}"; } } $dsn = 'mysql:'.implode(';', $dsnpairs); $dbh = new PDO($dsn, $settings['user'], $settings['pass']); $serverversion = $dbh->getAttribute(PDO::ATTR_SERVER_VERSION); $emulate_prepares = (version_compare($serverversion, $emulate_prepares_below_version, '<')); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulate_prepares); return $dbh; }
Durch die Nutzung dieser Funktion oder die Anpassung an Ihre spezifischen Vorlieben können Sie die ideale Balance zwischen Leistung und erreichen Sicherheit in Ihren PDO-Verbindungen.
Das obige ist der detaillierte Inhalt vonPDO MySQL: Vorbereitete Anweisungen oder Abfragecache? Was sollten Sie priorisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!