Bellen SET NAMES
op de verbinding is gelijk aan het aanroepen van set_charset
, op voorwaarde dat u geen van beide get_charset
. aanroept noch mysql_real_escape_string
(en vrienden).
Wanneer je set_charset
. aanroept , PHP doet twee dingen. Eerst roept het SET NAMES
. aan op de verbinding. Ten tweede onthoudt het welke tekenset je hebt ingesteld. Die statusinformatie wordt later alleen gebruikt in de get_charset
en mysql_real_escape_string
(en vrienden) functies. Daarom, als u deze functies niet gebruikt, kunt u de twee equivalenten overwegen.
Laten we de bron bekijken:
- Gebruikersfuncties
mysql_set_charset
enmysqli_set_charset
bel... - Motorfunctie
mysql_set_character_set
belt... -
Enginemacro
mysqlnd_set_character_set
, wat is gedefinieerd als:#define mysqlnd_set_character_set(conn, cs) \ ((conn)->data)->m->set_charset((conn)->data, (cs)))
en breidt uit naar...
MYSQLND_METHOD(mysqlnd_conn_data, set_charset)
die bevat de volgende code (genummerd voor discussie, dit zijn geen echte bronregelnummers):
1 if (PASS == conn->m->local_tx_start(conn, this_func)) {
2 char * query;
3 size_t query_len = mnd_sprintf(&query, 0, "SET NAMES %s", csname);
4
5 if (FAIL == (ret = conn->m->query(conn, query, query_len))) {
6 php_error_docref(NULL, E_WARNING, "Error executing query");
7 } else if (conn->error_info->error_no) {
8 ret = FAIL;
9 } else {
10 conn->charset = charset;
11 }
12 mnd_sprintf_free(query);
13
14 conn->m->local_tx_end(conn, this_func, ret);
15 }
Zoals je kunt zien, roept PHP SET NAMES
aan op de verbinding zelf (lijn 3). PHP volgt ook de zojuist ingestelde tekenset (regel 10). De opmerkingen gaan verder in op wat er gebeurt met conn->charset
, maar het volstaat te zeggen dat het uiteindelijk alleen in get_charset
staat en mysql_real_escape_string
(en vrienden).
Dus, als u niet geïnteresseerd bent in deze status, en u stemt ermee in om geen van beide get_charset
te gebruiken noch mysql_real_escape_string
, dan mag je SET NAMES
. noemen op de verbinding zelf zonder nadelige gevolgen.
Even terzijde, en ik heb dit nog nooit gedaan, maar het lijkt op het compileren van PHP met -DPHP_DEBUG=1
maakt substantiële foutopsporing mogelijk via verschillende DBG
macro's. Dat kan handig zijn om te zien hoe uw code door dit blok gaat.