Hướng dẫn mysqli_set_charset

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ápmysqli_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:

$mysqli = new mysqli("localhost","my_user","my_password","my_db");

if ($mysqli -> connect_errno) {
  echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
  exit();
}

echo "Initial character set is: " . $mysqli -> character_set_name();

// Change character set to utf8
$mysqli -> set_charset("utf8");

echo "Current character set is: " . $mysqli -> character_set_name();

$mysqli -> close();
?>


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ố

ParameterDescription
connection Required. Specifies the MySQL connection to use
charset Required. Specifies the default character set

Chi tiết kỹ thuật

Giá trị trả lại:ĐÚNG về thành công. FALSE khi thất bại
Phiên bản PHP:5.0.5+

Ví dụ - Phong cách thủ tục

Thay đổi bộ ký tự máy khách mặc định:

$con=mysqli_connect("localhost","my_user","my_password","my_db");

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  exit;
}

echo "Initial character set is: " . mysqli_character_set_name($con);

// Change character set to utf8
mysqli_set_charset($con,"utf8");

echo "Current character set is: " . mysqli_character_set_name($con);

mysqli_close($con);
?>



❮ Tham khảo PHP MySQLi


Gọi SET NAMEStrê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_charsethoặ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 NAMESkế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_charsetmysql_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:

  1. Các chức năng của Userland mysql_set_charsetmysqli_set_charsetgọi ...
  2. Chức năng động cơ mysql_set_character_setgọi ...
  3. 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 ...

  4. 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 NAMESchí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_charsetmysql_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_charsetcũng như không mysql_real_escape_string, thì bạn có thể gọi SET NAMESchí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=1sẽ cho phép gỡ lỗi đáng kể thông qua các DBGmacro 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ẻ