Hàm mysqli_set_charset[]
sẽ thiết lập bảng mã kí tự mặc định khi bạn gửi dữ liệu từ form đến database server.
Cú pháp
Cú pháp: mysqli_set_charset[ $connect, $charset];
Trong đó:
$connect
là kết nối MySQL.$charset
là tên bảng mã kí tự muốn đặt làm mặc đinh.
Kết quả trả về
Hàm sẽ trả về True nếu thiếp lập thành công, ngược lại hàm sẽ trả về Fasle.
Ví dụ
Cách sử dụng hàm mysqli_set_charset[]
:
Code
$con=mysqli_connect["localhost","my_user","my_password","my_db"]; // Kiểm tra kết nối if [mysqli_connect_errno[]]{ echo "Failed to connect to MySQL: " . mysqli_connect_error[]; } // thay đổi bảng mã kí tự thành utf-8 mysqli_set_charset[$con,"utf8"]; mysqli_close[$con];
Tham khảo: w3schools.com
❮ Tham khảo PHP MySQLi
Ví dụ - Kiểu hướng đối tượng
Thay đổi bộ ký tự máy khách mặc định:
Xem ví dụ về phong cách thủ tục ở phía dưới.
Định nghĩa và Cách sử dụng
Hàm set_charset [] / mysqli_set_charset [] chỉ định bộ ký tự mặc định được sử dụng khi gửi dữ liệu đến và đi từ máy chủ cơ sở dữ liệu.
Lưu ý: Để chức năng này hoạt động trên nền tảng Windows, bạn cần có thư viện máy khách MySQL 4.1.11 trở lên [đối với MySQL 5.0, bạn cần 5.0.6 trở lên].
Cú pháp
Phong cách hướng đối tượng:
$mysqli -> set_charset[charset]
Phong cách thủ tục:
mysqli_set_charset[connection, charset]
Giá trị tham số
connection | Required. Specifies the MySQL connection to use |
charset | Required. Specifies the default character set |
Chi tiết kỹ thuật
ĐÚNG về thành công. FALSE khi thất bại |
5.0.5+ |
Ví dụ - Phong cách thủ tục
Thay đổi bộ ký tự máy khách mặc định:
❮ Tham khảo PHP MySQLi
Gọi SET NAMES
trên kết nối tương đương với gọi điện set_charset
, miễn là bạn không gọi get_charset
hoặc mysql_real_escape_string
[và bạn bè].
Khi bạn gọi set_charset
, PHP thực hiện hai việc. Đầu tiên, nó gọi SET NAMES
kết nối. Thứ hai, nó ghi nhớ bộ ký tự bạn đã đặt. Thông tin trạng thái đó sau này chỉ được sử dụng trong các hàm get_charset
và mysql_real_escape_string
[và bạn bè]. Do đó, nếu bạn không sử dụng các chức năng này, thì bạn có thể coi hai chức năng này là tương đương.
Hãy đi bộ nguồn:
- Các chức năng của Userland
mysql_set_charset
vàmysqli_set_charset
gọi ... - Chức năng động cơ
mysql_set_character_set
gọi ... Macro động cơ
mysqlnd_set_character_set
, được định nghĩa là:#define mysqlnd_set_character_set[conn, cs] \ [[conn]->data]->m->set_charset[[conn]->data, [cs]]]
và mở rộng đến ...
MYSQLND_METHOD[mysqlnd_conn_data, set_charset]
mà chứa đoạn mã sau [đánh số để thảo luận, đây không phải là số dòng nguồn thực tế]:
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 }
Như bạn có thể
thấy, PHP gọi SET NAMES
chính kết nối [dòng 3]. PHP cũng theo dõi bộ ký tự vừa đặt [dòng 10]. Các bình luận thảo luận thêm về những gì xảy ra với conn->charset
, nhưng đủ để nói rằng nó kết thúc chỉ có ở trong get_charset
và mysql_real_escape_string
[và bạn bè].
Vì vậy, nếu bạn không quan tâm đến trạng thái này, và bạn đồng ý sử dụng get_charset
cũng như không mysql_real_escape_string
, thì bạn có thể gọi SET NAMES
chính kết nối mà không ảnh hưởng gì.
Ngoài ra, và tôi chưa bao giờ làm điều này, nhưng có vẻ như việc biên dịch PHP với
-DPHP_DEBUG=1
sẽ cho phép gỡ lỗi đáng kể thông qua các DBG
macro khác nhau . Điều đó có thể hữu ích trong việc xem cách mã của bạn đi qua khối này.
6 hữu ích 5 bình luận chia sẻ