Query trong SQL

Kết nối database trong WordPress

Vài mẹo kết nối database trong Wordpress giúp các bạn nhanh chóng hiểu được cách query trong Wordpress, cực kì đơn giản và dễ sử dụng hơn rất nhiều so với các CMS khác !

Xin chào các bạn, WordPress là một trong những CMS cực kỳ dễ dùng, ngay cả với kết nối cơ sở dữ liệu trong WordPress cũng vậy, các bạn sẽ thấy nó dễ hơn rất nhiều so với các mã nguồn mở khác như PHPBB hoặc Joomla hay Drupal ! Bài viết sau đây sẽ giới thiệu vài điểm cơ bản kết nối database trong WordPress giúp các bạn nhanh chóng tiếp cận WordPress.

Query trong SQL
Query trong SQL

Danh sách bảng cơ sở dữ liệu trong WordPress

Trong bảng cơ sở dữ liệu mặc định, ta có các bảng sau:

  • _commentmeta : Nơi lưu trữ các thông tin liên quan tới comment của khách như Meta …
  • _comments : Nơi lưu trữ nội dung comment
  • _links : Đã bỏ trong thời gian gần đây, tuy nhiên nó vẫn có, dùng để lưu các đường link bạn cho thêm vào
  • _options : Nơi lưu trữ cài đặt của toàn trang !
  • _postmeta : Nơi lưu trữ các thông tin Meta của Bài đăng
  • _posts : Nơi chứa nội dung bài đăng, như tựa đề, nội dung, tác giả, ngày tháng
  • _termmeta : Nơi lưu trữ các thông tin Meta của Term như Tag Meta …
  • _terms : Category và Tag và các loại Custom Taxonomy sẽ có ở đây
  • _term_relationships : Chứa các mối quan hệ cha con giữa các Taxonomy
  • _term_taxonomy : Taxonomy
  • _usermeta : Chứa thông tin thêm của User như đường link Facebook …
  • _users : Lưu trữ mọi thông tin của User như tên, mật khẩu, tên hiển thị
  • Ngoài ra các bạn cũng có thể thêm thoải mái các bảng dữ liệu !

Trong đó, khi kết nối tới bảng nào đó có sẵn trong WordPress thì ta có thể gọi trực tiếp như thế này: $wpdb->posts để kết nối tới bảng POSTS của WordPress.

Những lưu ý khi kết nối tới cơ sở dữ liệu an toàn

Cũng chả khác gì các CMS khác, WordPress có một vài quy ước như sau:

  1. Bạn sẽ phải sử dụng $wpdb->prepare() để an toàn trong việc kết nối tới cơ sở dữ liệu, nó hoạt động giống như hàm sprintf nên mình thường dùng Sprintf để cho ngắn, ‘%s’ sẽ đại diện cho String, còn ‘%d’ là số, ‘%f’ là Float ( 1/2 ) chẳng hạn !
  2. Không bao giờ được sử dụng kết nối theo cách của bạn, phải sử dụng Class mặc định của WP, chỉ cần chạy $wpdb->query('Các lệnh SQL của bạn');
  3. Bạn muốn có một bảng riêng ? Okey, bạn gọi thêm hàm $wpdb->prefix để lấy cái prefix mà người dùng cài đặt trang, còn các bảng mặc định thì chỉ cần gọi trực tiếp, ví dụ $wpdb->posts để kết nối tới bảng POSTS hoặc $wpdb->prefix . 'BangCuaBan' để kết nối tới bảng của bạn !

Kết nối cơ bản trong WordPress

Tôi ví dụ bạn đang cần kết nối tới cơ sở dữ liệu trong một hàm nào đó, bạn có thể thêm vào trong hàm như sau:

function _need_connect_database() {
global $wpdb;
}

Khi bạn muốn kết nối tới một bảng nào đó trong WordPress, bạn cần phải gọi Prefix kèm theo tên bảng, mọi bảng và mọi CMS đều cho phép người dùng thêm Prefix vào trong bảng dữ liệu để có thể cài được nhiều trang trong một bảng dữ liệu và để bảo mật, ví dụ:

function _need_connect_database() {
global $wpdb;
$prefix = $wpdb->prefix;
$userDatabase = $prefix. 'OtherUsersTable';
}

Query cơ bản

Bạn sẽ gọi bất kỳ lệnh MySQL nào trong Query của WordPress, trả về là một Object, thông thường ta sẽ không chạy các lệnh select trong Query này:

global $wpdb;
$results = $wpdb->query( $wpdb->prepare('Truncate %s', $wpdb->users) );

Các bạn nên nhớ: Hàm prepare trong $wpdb là để tránh SQL Injection, nó chả khác gì hàm sprinf cả !

SELECT môt loạt ROW

Ta sẽ sử dụng $wpdb->get_results() để làm việc này ! Sau khi lấy được kết quả các bạn cần sử dụng hàm foreach để hiển thị kết quả vì nó trả về mảng Array() nhé !

global $wpdb;
$results = $wpdb->get_results( sprintf('select * from %s where post_title = \'%s\'', $wpdb->posts, 'Chào mừng bạn đến với WordPress') );
foreach ( $results as $value ){
Echo $value->ID;
}

SELECT một ROW

Bạn sẽ sử dụng một hàm khác trong Class WPDB của WordPress đó là get_row nhé, hàm này trả về một row trong cơ sở dữ liệu và trả về dạng Object:

global $wpdb;
$result = $wpdb->get_row( sprint('select count(*) As countauthor from %s where post_author = %d', $wpdb->posts, 5) );
echo $result->countauthor;

Trong trường hợp bạn muốn đếm dữ liệu, hoặc tìm một row thoả mãn điều kiện trong bảng, bạn có thể sử dụng hàm get_row này nhé !

Ngoài ra, các bạn cũng có thể có thêm hàng ngàn cách tại Document của WordPress tại đây: https://codex.wordpress.org/Class_Reference/wpdb

Bất kỳ vướng mắc nào về việc kết nối database trong WordPress hãy comment bên dưới, mình sẽ hỗ trợ nhiệt tình !

Cảm ơn và chúc các bạn ngày cuối tuần vui vẻ !

TÁC GIẢ:

Tôi là Jam, thâm niên 7 năm thiết kế website và làm SEO. Hãy theo dõi blog của tôi để nhận được nhiều chia sẻ thú vị xung quanh chủ đề công nghệ.
Bạn có thấy bài viết về kết nối database trong Wordpress thú vị ? Chia sẻ ngay tới mọi người, hoặc tham gia bình luận thật sôi nổi nhé !

Có 4 bình luận !

  1. Haiza code php gì mà nhìn ko có thiện cảm, toàn đô la $ với % loằng ngoằng, dán vào html ko khéo trắng xoá web, trong khi thật sự mình thấy code của thằng blogger và thằng btumbl r người ko rành code như mình cũng thấy nó thân thiện, đơn giản mà lại rất bảo mật nữa. Các xem và viết, fix rất đơn giản, lỗi là báo luôn

    1. Buồn cười thật, blogger với tumblr là bạn đang nhìn thấy giao diện của nó thôi, giao diện sử dụng kiểu XML hoặc HTML nó phải khác chứ. Đây là code PHP. THiện cảm hay không có thiện cảm học biết liền 😀

  2. em đang làm khóa luận liên quan đến wordpress, em muốn kết nối và tính tiền khi có khách hàng mua sản phẩm trong bảng Woocomerce_order_item và lấy tổng tiền bên postmeta tại order_total, kết nối như nào mới được ạ, em cảm ơn!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *