WordPress – class wpdb

1. สั่ง run SQL Command อะไรก็ได้ ด้วยคำสั่ง $wpdb->query

2. select ค่าของ 1 column  1 row ด้วยคำสั่ง $wpdb->get_var

3. select 1 row ด้วยคำสั่ง $wpdb->get_row

4. select แบบระบุ column หลายๆ row ด้วยคำสั่ง $wpdb->get_col

5. select อะไรก็ได้ตามต้องการด้วยคำสั่ง $wpdb->get_results

6. insert row ด้วยคำสั่ง $wpdb->insert

7. update row ด้วยคำสั่ง $wpdb->update

 

1. สั่ง run SQL Command อะไรก็ได้ ด้วยคำสั่ง $wpdb->query

ใช้เพื่อสั่ง run query ใดๆก็ตามที่ต้องการ เช่น insert, update, delete, etc.

format คำสั่ง คือ $wpdb->query(‘query’);

ผู้ใช้จะต้อง pass parameter เป็น SQL c0mmand เข้าไป

แนะนำว่าให้เรียก function ที่มีการป้องกันการทำ SQL Injection ก่อน ดังตัวอย่าง

$sql = $wpdb->prepare( ‘query’ [, value_parameter, value_parameter … ] );

ถ้าจะเรียกแบบคำสั่งเดียวจบก็คือ $wpdb->query($wpdb->prepare( ‘query’ [, value_parameter, value_parameter … ] ))

query = SQL c0mmand

value_parameter คือ ค่าตัวแปรที่เราจะ pass เข้าสู่ sql command ค่ะ

ด้วยวิธีนี้เราจะบังคับให้ SQL รับตัวแปรเป็นค่าๆ ตามที่เราระบุ ไม่สามารถส่งอย่างอื่น เพื่อสั่งให้ระบบ run SQL ที่เราไม่อนุญาต

ตัวอย่่งการใช้คำสั่งนี้ เช่น

$wpdb->query( $wpdb->prepare(
	"
		INSERT INTO $wpdb->postmeta
		( post_id, meta_key, meta_value )
		VALUES ( %d, %s, %s )
	",
        10,
	$metakey,
	$metavalue
) );
เป็นการสั่ง insert data เข้า table postmeta ด้วยค่าของ post_id, meta_key, meta_value

2. select ค่า 1 ค่า ด้วยคำสั่ง $wpdb->get_var

format คำสั่ง คือ $wpdb->get_var(‘query’,column_offset,row_offset)

คำสั่งของ $wpdb->get_var จะต้อง return 1 ค่า เท่านั้น

คำสั่งนี้จะ return null value ถ้า  select หาตาม SQL Command แล้วไม่สามารถหาค่าคืนมาได้

 

parameter ที่ต้อง pass เข้าไปเพื่อใช้คำสั่งคือ

query (string) คือ SQL command

column_offset (integer) ให้ระบุ column ที่ต้องการ โดย colmun แรก นับที่ 0 ถ้าไม่ระบุ จะ default = 0

row_offset (integer) ให้ระบุ row ที่ีต้องการ โดย row แรก นับที่ 0 ถ้าไม่ระบุ จะ default = 0

 

ตัวอย่างการเรียกใช้ เช่น หาจำนวนของผู้ใช้ทั้งหมด
$user_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->users;" ) );
echo "<p>User count is {$user_count}</p>";

 

3. select 1 row ด้วยคำสั่ง $wpdb->get_row

format คำสั่ง คือ $wpdb->get_row(‘query’, output_type, row_offset)

คำสั่งของ $wpdb->get_row จะต้อง return ผลลัพธ์แค่ 1 รายการเท่านั้น

คำสั่งนี้จะ return null value ถ้า  select หาตาม SQL Command แล้วไม่สามารถหาค่าคืนมาได้

 

parameter ที่ต้อง pass เข้าไปเพื่อใช้คำสั่งคือ

query (string) คือ SQL command

output_type ให้ระบุว่าต้องการจะให้ return ผลลัพธ์ที่ได้เป็นอะไร จาก 1 ใน 3 แบบนี้ ถ้าไม่ระบุ จะ default = OBJECT
  • OBJECT – return ผลลัพธ์ที่ได้เป็น object
  • ARRAY_A – return ผลลัพธ์ที่ได้เป็นassociative array หมายถึง การเรียกค่าผลลัพธฺจะเรียกแบบอ้างชื่อ field ได้
  • ARRAY_N – return ผลลัพธ์ที่ได้เป็น numerically indexed array  หมายถึง การเรียกค่าผลลัพธฺจะเรียกแบบอ้างลำดับของ field ที่เราระบุใน SQL
row_offset (integer) ให้ระบุ row ที่ีต้องการ โดย row แรก นับที่ 0 ถ้าไม่ระบุ จะ default = 0
ตัวอย่างการเรียกใช้ เช่น การ select link ที่มี link_id = 10
$mylink = $wpdb->get_row(“SELECT * FROM $wpdb->links WHERE link_id = 10”);
หมาเหตุ: ตัวอย่างนี้ไม่ระบุ output_type ก็ถือเป็น output_type = OBJECT
เวลาจะเอาผลลัพธ์ไปใช้ก็เรียกใช้ในลักษณะนี้
echo $mylink->link_id; // prints “10”
ถ้าระบุ output_type เป็นอย่างอื่น เช่น ARRAY_A การเรียกใช้ผลลัพธ์จะแตกต่างไปดังนี้
$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A);
echo $mylink['link_id']; // prints "10"
หรือระบุ output_type เป็น ARRAY_N
$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N);
echo $mylink[1]; // prints "10"
ซึ่งจากตัวอย่างจะเห็นได้ว่าการเรียกใช้จะแตกต่างกัน อยู่ที่ว่าผู้ใช้มีวัตถุประสงค์ในการเขียนโปรแกรมยังไง
4. select แบบระบุ column หลายๆ row ด้วยคำสั่ง $wpdb->get_col

format คำสั่ง คือ $wpdb->get_col(‘query’,column_offset)

คำสั่งของ $wpdb->get_col จะต้อง return ผลลัพธ์แค่ 1 ค่าเท่านั้น

คำสั่งนี้จะ return null value ถ้า  select หาตาม SQL Command แล้วไม่สามารถหาค่าคืนมาได้

 

parameter ที่ต้อง pass เข้าไปเพื่อใช้คำสั่งคือ

query (string) คือ SQL command โดยคำสั่งของ query นี้จะต้อง return 1 column เท่านั้น แต่จะมีกี่รายการก็ได้

column_offset (integer) ให้ระบุ column ที่ต้องการ โดย colmun แรก นับที่ 0 ถ้าไม่ระบุ จะ default = 0

 

ตัวอย่างการเรียกใช้

$link_id = $wpdb->get_col( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_id = 10");

echo $link_id ; // prints “10”

 

5. select อะไรก็ได้ตามต้องการด้วยคำสั่ง $wpdb->get_results

format คำสั่ง คือ  $wpdb->get_results(‘query’, output_type);

คำสั่งของ $wpdb->get_results จะreturn ผลลัพธ์มาเป็น set ของ row ตามที่ระุบุผลลัพธ์ที่ต้องการไว้ใน ‘query’

คำสั่งนี้จะ return null value ถ้า  select หาตาม SQL Command แล้วไม่สามารถหาค่าคืนมาได้

 

parameter ที่ต้อง pass เข้าไปเพื่อใช้คำสั่งคือ

query (string) คือ SQL command

output_type ให้ระบุว่าต้องการจะให้ return ผลลัพธ์ที่ได้เป็นอะไร จาก 1 ใน 3 แบบนี้ ถ้าไม่ระบุ จะ default = OBJECT
  • OBJECT – return ผลลัพธ์ที่ได้เป็น object
  • OBJECT_K –  return ผลลัพธ์ที่ได้เป็น associative array of row objects โดยใช้ค่า column แรกเป็น key ถ้า key ซ้ำก็จะไม่สนใจ (ค่า key ซ้ำกันไม่ได้)
  • ARRAY_A – return ผลลัพธ์ที่ได้เป็นassociative array หมายถึง การเรียกค่าผลลัพธฺจะเรียกแบบอ้างชื่อ field ได้
  • ARRAY_N – return ผลลัพธ์ที่ได้เป็น numerically indexed array  หมายถึง การเรียกค่าผลลัพธฺจะเรียกแบบอ้างลำดับของ field ที่เราระบุใน SQL
row_offset (integer) ให้ระบุ row ที่ีต้องการ โดย row แรก นับที่ 0 ถ้าไม่ระบุ จะ default = 0
จำนวนผลลัพธ์ของ row returned จากคำสั่ง  ‘SELECT’ จะเรียกจาก $wpdb->num_rows ได้
ตัวอย่างการใช้ เช่น หา post id และ title ของผู้เขียนที่มี id = 5 และอยู่ในสถานะ draft
$fivesdrafts = $wpdb->get_results( 
	"
	SELECT ID, post_title 
	FROM $wpdb->posts
	WHERE post_status = 'draft' 
		AND post_author = 5
	"
);
ผลลัพธ์ที่ได้จะมีมากกว่า 1 row ดังนั้น เราต้องเอามาวน loop เพื่อทำงานกับค่าที่ return กลับมาเหล่านั้น
foreach ( $fivesdrafts as $fivesdraft ) 
{
	echo $fivesdraft->post_title;
}
หมายเหตุ: ตัวอย่างนี้ไม่ระบุ output_type แปลว่า output_type = OBJECT

6. insert row ด้วยคำสั่ง $wpdb->insert

format คำสั่ง คือ  $wpdb->insert( $table, $data, $format );

ค่าของผลลัพธ์ที่ return คือ ถ้าำสำเร็จ เราจะสามารถเรียก id ของ row ที่เรา insert เข้าไป (auto increment id ปกติก็คือ pk id ของ table เรา)  เ่ช่น $wpdb->insert_id แต่ถ้าไม่สำเร็จ ระบบจะ return false

parameter ที่ต้อง pass เข้าไปเพื่อใช้คำสั่งคือ

table (string) หมายถึง ชื่อของ table ที่เราต้องการ insert ข้อมูล
data  (array) หมายถึง  ค่าของข้อมูลที่เราต้องการ insert  ระบุเป็น “ชื่อ column” => “ค่าของข้่อมูล” คู่กันไปเรื่อยๆ
format (array|string) (เป็นตัวแปร optional หมายถึง ไม่ใส่ก็ได้) หมายถึง array ของ formats ที่จะ map กับค่าใน data ที่จะส่งเข้าไป เช่น %s = string, %d = decimal number, %f = floar ถ้าไม่ใส่ จะถือว่าเป็น string ทั้งหมด 
ตัวอย่างการใช้ เช่น insert data เข้า table ชื่อ  ‘table’ โดยให้  ‘column1′ = ”value1’ และ ‘column2’ = 123 
$wpdb->insert( 
	'table', 
	array( 
		'column1' => 'value1', 
		'column2' => 123 
	), 
	array( 
		'%s', 
		'%d' 
	) 
);

แต่ถ้าต้องการ insert post แนะนำให้ใช้คำสั่ง wp_insert_post น่าจะดีกว่า และถ้าต้องการเพิ่ม category ใหม่ แนะนำใช้คำสั่งในลักษณะนี้

$arg = array('description' => "my description", 'parent' => "cat_ID"); 
$new_cat_id = wp_insert_term("cat name", "category", $arg);

 

7. update row ด้วยคำสั่ง $wpdb->update

format คำสั่ง คือ $wpdb->update( $table, $data, $where, $format = null, $where_format = null );

ค่าของผลลัพธ์ที่ return คือ ถ้าำสำเร็จ return จำนวน row ที่ถูก update แต่ถ้าไม่สำเร็จ ระบบจะ return false

table (string) หมายถึง ชื่อของ table ที่เราต้องการ insert ข้อมูล

data  (array) หมายถึง  ค่าของข้อมูลที่เราต้องการ insert  ระบุเป็น “ชื่อ column” => “ค่าของข้่อมูล” คู่กันไปเรื่อยๆ

where (array) หมายถึง ประโยคที่เราต้องการจะใส่ใน where clause ของ SQL command ถ้าใส่หลายค่าจะถือว่า join กันแบบ AND โดยต้องระบุเป็นคู่เหมือนกับ data คือ  ระบุเป็น “ชื่อ column” => “ค่าของข้่อมูล” คู่กันไปเรื่อยๆ

format (array|string) (เป็นตัวแปร optional หมายถึง ไม่ใส่ก็ได้) หมายถึง array ของ formats ที่จะ map กับค่าใน data ที่จะส่งเข้าไป เช่น %s = string, %d = decimal number, %f = floar ถ้าไม่ใส่ จะถือว่าเป็น string ทั้งหมด

where_format (array|string)  (เป็นตัวแปร optional หมายถึง ไม่ใส่ก็ได้) หมายถึง array ของ formats ที่จะ map กับค่าใน where ที่จะส่งเข้าไป เช่น %s = string, %d = decimal number, %f = floar ถ้าไม่ใส่ จะถือว่าเป็น string ทั้งหมด

ตัวอย่างการใช้ เช่น ต้องการ update ค่าใน table ‘table’ โดย update ค่าของ ‘column1’ => ‘value1’ โดย  ‘value1’  มี format เป็น string และ ‘column2’ => ‘value2’  โดย  ‘value1’  มี format เป็น decimal number และให้ where ด้วยค่า ‘ID’ = 1  โดยที่ 1 มี format เป็น decimal number

$wpdb->update( 
	'table', 
	array( 
		'column1' => 'value1',	// string
		'column2' => 'value2'	// integer (number) 
	), 
	array( 'ID' => 1 ), 
	array( 
		'%s',	// value1
		'%d'	// value2
	), 
	array( '%d' ) 
);

Reference Site:  http://codex.wordpress.org

เนื้อหาที่เกี่ยวข้อง :

Leave a Reply

Your email address will not be published. Required fields are marked *