Setzen Sie den Zeichensatz mit MySQLi

8

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%     
sys_debug 31.05.2012, 08:19
quelle

5 Antworten

9

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.

    
xdazz 31.05.2012, 08:24
quelle
6

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:

  • Aufruf von 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 SET NAMES -Anweisung, setzt aber auch den Wert von mysql->charset und beeinflusst somit den von mysql_real_escape_string()

    verwendeten Zeichensatz

    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.

    
Mark Amery 02.05.2016 13:12
quelle
1

Sie können dies verwenden. Es ist wirklich schön für mysqli Zeichensatz

%Vor%     
Obaidul Haque 24.10.2017 15:39
quelle
0

Für Liebhaber des prozeduralen Stils.

%Vor%     
AMB 21.11.2017 09:56
quelle
-1
%Vor%

$ conn = Verbindungszeichenfolge

    
alpc 02.05.2016 10:43
quelle

Tags und Links