Bei Verwendung von PHP für MySQL -Datenbankvorgänge begegnen wir häufig auf die Situation, in der MySQLI :: $ connect_error verstümmelte Code zurückgibt. Dieses Problem wird im Allgemeinen durch falsche Charaktercodierungseinstellungen verursacht, die zu verstümmelten Codes für Fehlermeldungen aus der Datenbank führen und nicht normal angezeigt werden können.
MySQLI :: $ connect_error ist ein Attribut, das in der MySQLI -Erweiterung verwendet wird, um Datenbankverbindungsfehlerinformationen zu erhalten. Wenn es ein Problem mit der Datenbankverbindung gibt, verwenden wir sie normalerweise, um die Fehlermeldung zu erfassen und zu verarbeiten. Wenn wir die Zeichencodierung jedoch nicht korrekt einstellen, wenn wir eine Verbindung zur Datenbank herstellen, kann die Fehlermeldung verstümmelt erscheinen.
Dafür kann es mehrere Gründe geben:
Wenn die Datenbankverbindung verbunden ist, wird kein Zeichensatz angegeben.
Der Standard -Zeichensatz der Datenbank stimmt nicht mit dem Standardzeichen von PHP überein.
Die Tabellen- und Feldzeicheneinstellungen in der Datenbank sind nicht einheitlich.
Die Zeichensatzeinstellungen des Serverbetriebssystems oder der PHP -Umgebung sind inkonsistent.
Um verstümmelte Probleme zu vermeiden, müssen wir sicherstellen, dass PHP und MySQL mit einem einheitlichen Charakter -Set kommunizieren. Im Allgemeinen gibt es verschiedene Möglichkeiten, ein Zeichensatz festzulegen:
Beim Erstellen einer Datenbankverbindung können wir das Zeichen durch die MySQLI :: set_charset () -Methode einstellen. Diese Methode setzt die Zeichencodierung für die aktuelle Verbindung, um sicherzustellen, dass nachfolgende SQL -Abfragevorgänge denselben Zeichensatz verwenden.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$servername</span></span><span> = </span><span><span class="hljs-string">"localhost"</span></span><span>;
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">"root"</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
</span><span><span class="hljs-variable">$dbname</span></span><span> = </span><span><span class="hljs-string">"test_db"</span></span><span>;
</span><span><span class="hljs-comment">// Eine Verbindung erstellen</span></span><span>
</span><span><span class="hljs-variable">$conn</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-variable">$servername</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$dbname</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">$conn</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$conn</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// Stellen Sie den Zeichen auf UTF-8</span></span><span>
</span><span><span class="hljs-variable">$conn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_charset</span></span><span>(</span><span><span class="hljs-string">"utf8"</span></span><span>);
</span><span><span class="hljs-comment">// Fahren Sie mit anderen Datenbankvorgängen fort</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In diesem Beispiel $ conn-> set_charset ("utf8"); Legt den Zeichen auf UTF-8 fest. Auf diese Weise wird die UTF-8-Codierung unabhängig von Abfrageergebnissen oder Verbindungsfehlerinformationen verwendet, um Probleme mit verstümmelten Code zu vermeiden.
Wenn der Standard-Zeichensatz der Datenbank oder Tabelle nicht auf UTF-8 festgelegt ist, kann dies auch zu kühnenden Codeproblemen führen. Um den Zeichensatz zu vereinen, kann der Zeichensatz von Datenbank, Tabelle und Feld über die folgende SQL-Anweisung auf UTF-8 eingestellt werden.
Ändern Sie den Zeichensatz der Datenbank:
<span><span><span class="hljs-keyword">ALTER</span></span><span> DATABASE test_db </span><span><span class="hljs-type">CHARACTER</span></span><span> </span><span><span class="hljs-keyword">SET</span></span><span> utf8 </span><span><span class="hljs-keyword">COLLATE</span></span><span> utf8_general_ci;
</span></span>
Ändern Sie den Zeichensatz der Tabelle:
<span><span><span class="hljs-keyword">ALTER</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> your_table_name </span><span><span class="hljs-keyword">CONVERT</span></span><span> </span><span><span class="hljs-keyword">TO</span></span><span> </span><span><span class="hljs-type">CHARACTER</span></span><span> </span><span><span class="hljs-keyword">SET</span></span><span> utf8 </span><span><span class="hljs-keyword">COLLATE</span></span><span> utf8_general_ci;
</span></span>
Ändern Sie den Zeichensatz von Feldern in der Tabelle:
<span><span><span class="hljs-keyword">ALTER</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> your_table_name CHANGE column_name column_name </span><span><span class="hljs-type">VARCHAR</span></span><span>(</span><span><span class="hljs-number">255</span></span><span>) </span><span><span class="hljs-type">CHARACTER</span></span><span> </span><span><span class="hljs-keyword">SET</span></span><span> utf8 </span><span><span class="hljs-keyword">COLLATE</span></span><span> utf8_general_ci;
</span></span>
Wenn Sie feststellen, dass Sie den Zeichensatz für jede Verbindung manuell festlegen müssen, sollten Sie den globalen Zeichen in MySQLs Konfigurationsdatei ( my.cnf oder my.ini ) festlegen. Fügen Sie die folgende Konfiguration im Bereich [MySQLD] hinzu:
<span><span><span class="hljs-section">[mysqld]</span></span><span>
</span><span><span class="hljs-attr">character-set-server</span></span><span>=utf8
</span></span>
Starten Sie dann den MySQL -Dienst neu, damit die Änderungen wirksam werden.
Zusätzlich zu den Datenbank- und Verbindungseinstellungen kann der Zeichensatz der PHP -Konfiguration und des Betriebssystems auch den Zeichensatz von Datenbankvorgängen beeinflussen. Stellen Sie sicher, dass der Zeichensatz Ihrer PHP-Umgebung und des Betriebssystems auf UTF-8 eingestellt ist, was überprüft werden kann von:
Überprüfen Sie den PHP -Standard -Zeichensatz : Sie können die Funktion PHPInfo () verwenden, um die Zeichensatzeinstellungen der aktuellen PHP -Umgebung anzuzeigen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">phpinfo</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Überprüfen Sie den Betriebssystem -Zeichensatz : In Linux -Systemen können Sie mit dem Befehl "Gebietsschema die Zeichensatzeinstellungen des aktuellen Systems" angezeigt werden.
<span><span>locale
</span></span>
MySQLI :: $ connect_error gibt den verstümmelten Code zurück, der normalerweise auf inkonsistente Charaktercodierungseinstellungen zurückzuführen ist. Um verstümmelte Codeprobleme zu vermeiden, können wir den Zeichensatz explizit auf UTF-8 einstellen, wenn wir eine Verbindung zur Datenbank herstellen, um sicherzustellen, dass die Zeichensätze der Datenbank, Tabellen und Felder konsistent sind, und die Zeichensatzeinstellungen der MySQL-Konfigurationsdatei und die PHP-Umgebung nach Bedarf ändern. Durch diese Schritte kann das durch die Charaktercodierung verursachte verstümmelte Problem effektiv vermieden werden und die Kommunikation zwischen PHP und MySQL kann reibungslos sein.
Verwandte Tags:
mysqli