Memanggil SET NAMES
pada koneksi sama dengan memanggil set_charset
, asalkan Anda tidak memanggil get_charset
atau mysql_real_escape_string
(dan teman-teman).
Saat Anda memanggil set_charset
, PHP melakukan dua hal. Pertama, ia memanggil SET NAMES
pada sambungan. Kedua, ia mengingat rangkaian karakter apa yang Anda tetapkan. Informasi status tersebut nantinya hanya digunakan di get_charset
dan mysql_real_escape_string
(dan teman-teman) fungsi. Oleh karena itu, jika Anda tidak menggunakan fungsi-fungsi ini, Anda dapat mempertimbangkan keduanya yang setara.
Mari kita telusuri sumbernya:
- Fungsi Userland
mysql_set_charset
danmysqli_set_charset
hubungi... - Fungsi mesin
mysql_set_character_set
panggilan... -
Makro mesin
mysqlnd_set_character_set
, yang didefinisikan sebagai:#define mysqlnd_set_character_set(conn, cs) \ ((conn)->data)->m->set_charset((conn)->data, (cs)))
dan diperluas ke...
MYSQLND_METHOD(mysqlnd_conn_data, set_charset)
yang berisi kode berikut (diberi nomor untuk diskusi, ini bukan nomor baris sumber yang sebenarnya):
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 }
Seperti yang Anda lihat, PHP memanggil SET NAMES
pada sambungan itu sendiri (baris 3). PHP juga melacak rangkaian karakter yang baru saja disetel (baris 10). Komentar lebih lanjut membahas apa yang terjadi dengan conn->charset
, tetapi cukup untuk mengatakan bahwa akhirnya hanya berada di get_charset
dan mysql_real_escape_string
(dan teman-teman).
Jadi, jika Anda tidak peduli dengan status ini, dan Anda setuju untuk tidak menggunakan get_charset
atau mysql_real_escape_string
, maka Anda dapat memanggil SET NAMES
pada koneksi itu sendiri tanpa efek buruk.
Sebagai tambahan, dan saya belum pernah melakukan ini, tetapi sepertinya mengkompilasi PHP dengan -DPHP_DEBUG=1
akan mengaktifkan debugging substansial melalui berbagai DBG
makro. Itu mungkin berguna untuk melihat bagaimana kode Anda melewati blok ini.