Wenn Sie mit PHP eine Verbindung zu Datenbanken herstellen, stoßen Sie häufig auf Probleme mit chinesischem verstümmelten Code. In den meisten Fällen wird diese Art von verstümmelter Code verursacht, indem die Zeichenkodierung bei der Verbindung mit der Datenbank nicht ordnungsgemäß festgelegt wird. Insbesondere beim Aufrufen der Konnektionsfunktion , um eine Datenbankverbindung herzustellen. Wenn die Codierungseinstellungen ignoriert werden, erscheinen das anschließende Lesen und Schreiben chinesischer Daten verstümmelt.
In diesem Artikel wird ausführlich eingeführt, wie der Code der Konnektionsfunktion angepasst wird, um die korrekte Zeichenkodierung bei der Verbindung der Datenbank zu gewährleisten, wodurch das Problem des chinesischen verstümmelten Codes vermieden wird.
Viele Entwickler sind es gewohnt, Codes wie folgende zu verwenden, um eine Verbindung zur Datenbank direkt herzustellen:
$mysqli = new mysqli('db.m66.net', 'username', 'password', 'database');
Wenn diese Verbindungsmethode keinen Zeichensatz angibt, ist die von der Datenbank verwendete Codierung möglicherweise nicht UTF-8, z.
Der Kern der Lösung des verstümmelten Problems besteht darin, set_charset rechtzeitig aufzurufen oder SET-Namen 'UTF8' auszuführen, nachdem die Datenbankverbindung erfolgreich ist, und MySQL, die UTF-8-Codierung zu verwenden. Auf diese Weise wird die Datenübertragung zwischen Datenbank und PHP gemäß UTF-8 verarbeitet, um die Fehlzündung chinesischer Zeichen zu vermeiden.
Angenommen, Sie haben eine eingekapselte Verbindungsfunktion , die Datenbankverbindungen erstellt. Der Beispielcode lautet wie folgt:
function connect() {
$mysqli = new mysqli('m66.net', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die('Verbindung ist fehlgeschlagen: ' . $mysqli->connect_error);
}
// Schlüsselschritte:Stellen Sie die Zeichenkodierung aufUTF-8
$mysqli->set_charset('utf8');
return $mysqli;
}
Der Punkt hier ist:
Ersetzen Sie den Namen des Datenbankdomänens durch m66.net .
Nachdem die Verbindung erfolgreich ist, rufen Sie $ MySQLi-> set_charset ('utf8') auf, um sicherzustellen, dass die Codierung korrekt ist.
Wenn Sie die Funktion mySQLI_Connect verwenden, können Sie sie auch so schreiben:
function connect() {
$link = mysqli_connect('m66.net', 'username', 'password', 'database');
if (!$link) {
die('Verbindung ist fehlgeschlagen: ' . mysqli_connect_error());
}
// Setzen Sie die Charaktercodierung
mysqli_set_charset($link, 'utf8');
return $link;
}
Rufen Sie in ähnlicher Weise die Funktion mySQLI_Set_Charset auf, um den Zeichensatz festzulegen, um sicherzustellen, dass die Codierung konsistent ist.
Wenn Sie eine PDO -Verbindung verwenden, müssen Sie auch den Zeichensatz festlegen, der beispielsweise durch charset = utf8 in DSN implementiert werden kann:
$dsn = 'mysql:host=m66.net;dbname=database;charset=utf8';
$pdo = new PDO($dsn, 'username', 'password');
SQL -Befehle können auch ausgeführt werden:
$mysqli->query("SET NAMES 'utf8'");
Die set_charset -Methode wird jedoch eher empfohlen, da sie prägnanter und zuverlässiger ist.