Ich hole Daten in arabischer Sprache von MySQL Tabellen mit MySQLi. Also verwende ich das normalerweise im prozeduralen Stil:
%Vor%Jetzt benutze ich den OOP-Stil, also versuche ich zu sehen, ob es etwas gibt, das ich setzen könnte, anstatt das oben genannte?
Ich habe das nur im PHP Handbuch gefunden, also habe ich es gemacht, aber was ist mit dem Setzen von Namen auf UTF8?
%Vor% Es ist dasselbe:
$ mysqli- & gt; Abfrage ("SET NAMES 'utf8'");
Aus dem Handbuch:
Dies ist die bevorzugte Methode zum Ändern des Zeichensatzes. Verwenden von mysqli :: query () SET NAMES auszuführen .. wird nicht empfohlen.
$mysqli->set_charset("utf8");
ist gerade genug, lass den mysqli db driver das Ding für dich machen.
Sie sollten
verwenden %Vor% Nicht verwenden SET NAMES
oder SET CHARACTER SET
explizit bei der Verwendung von MySQLi., und sicherlich nicht beide wie der Fragesteller hier ursprünglich war. Gründe, dass dies eine schlechte Idee ist:
SET CHARACTER SET utf8
nach SET NAMES utf8
eigentlich nur macht einige der Arbeiten rückgängig, die SET NAMES
getan hat . Das PHP-Handbuch warnt uns ausdrücklich Verwenden Sie mysqli_set_charset
, nicht SET NAMES
:
Dies ist die bevorzugte Methode zum Ändern des Zeichensatzes. Die Verwendung von mysqli_query (), um es zu setzen (wie SET NAMES utf8) wird nicht empfohlen. Weitere Informationen finden Sie im Abschnitt zu den MySQL-Zeichensatzkonzepten.
Unter der Haube ist mysqli_set_charset
nur Ein Wrapper für mysql_set_character_set
von der MySQL C-API (oder seinem mysqlnd-Äquivalent). Wenn wir uns die Dokumente für diese Funktion ansehen , können wir das sehen Unterschied zwischen ihm und SET NAMES
:
Diese Funktion funktioniert wie die
verwendeten ZeichensatzSET NAMES
-Anweisung, setzt aber auch den Wert vonmysql->charset
und beeinflusst somit den vonmysql_real_escape_string()
Mit anderen Worten, $mysqli->set_charset('foo')
tut alles SET NAMES foo
macht und auch stellt sicher, dass mysqli_real_escape_string
die neue Kodierung berücksichtigt. Zugegeben, wenn Sie nur Encodierungen wie Latin 1 und UTF 8 verwenden, die ASCII strikt erweitern (dh alle ASCII-Strings genau so kodieren, wie sie in ASCII kodiert wären), dann wird SET NAMES
anstelle von set_charset
won 'verwendet Ich breche nichts. Wenn Sie jedoch ungewöhnlichere Codierungen wie GBK verwenden, könnten Sie Ihre Strings verstopfen oder sogar SQL Injection-Schwachstellen einführen, die% umgehen. co_de% .
Es ist also eine gute Methode, nur mysqli_real_escape_string
, nicht set_charset
zu verwenden. Es gibt nichts, was SET NAMES
tut, das SET NAMES
nicht tut, und set_charset
vermeidet das Risiko, dass set_charset
sich falsch (oder sogar unsicher) verhält.
Sie können dies verwenden. Es ist wirklich schön für mysqli Zeichensatz
%Vor%