str_replace กับปัญหา “\” (backslash)


พอดีวันนี้ลองเข้าไปภายในกลุ่มของ ชมรมคนทำเว็บ ก็ไปเจอข้อความน่าสนใจเกี่ยวกับปัญหาที่ตั้งกระทู้ถามไว้ว่า
ผมติดปัญหาแก้ไม่ได้ครับ พอดีในไฟล์ PHP
"
$xxx = “aaaa\bbbb”;
ผมต้องการให้ ตัว “\” (backslash) เปลี่ยนเป็นตัว _ (underscore)
ผมลองใช้ str_replace(”\”,”_”,$xxx);
"
ไม่ได้ครับ มีใครแนะนำวิธีที่ถูกต้อง หรือวิธีอื่นบ้างครับ ขอบคุณครับ .
ลองดูจากรูปด้านบนจริงๆ แล้วก็น่าจะถูกต้องแล้ว แต่ลองนำข้อมูลมาทดสอบดู เอ้ยย ไม่ได้จริงๆ ด้วยแหะ ปัญหานี้เราก็ไม่เคยเจอซะด้วยซิ ก็เลยลองไปค้นหาข้อมูลดู พบว่า ถ้าเราต้องการ \ เป็นตัวแปลหนึ่งตัวต้องใช้ \\ สองตัว ตามตัวอย่าง เช่น

ถ้าเราต้องการให้ตัวแปล a เก็บค่า \ ตัวก็ใช้ \\ สองตัว ตัวอย่างเช่น
$a="\";    // วิธีที่ผิด
$a="\\";   // วิธีที่ถูก
และ ถ้าต้องการ  \\ สองตัว ก็ให้ใช้    \\\\  สี่ตัว

และถ้าเราต้องการ ' " ! @ # $ % ^ & * ( ) { } [ ] \ | + - ตัวใดตัวหนึ่งขึ้นมา ให้ใส่ \ แล้วตามด้วยตัวอักษระพิเศษเหล่านี้ (บางตัวอาจสร้างได้โดยไม่ต้องใส่ \ นำหน้า) ตัวอย่างเช่น
\! จะได้ !
\' จะได้ '
\" จะได้ "

สำหรับปัญหานี้ตามด้านบน วิธีใช้งานที่ถูกต้อง

1. str_replace(“\\”,”_”,$xxx);
2. preg_replace(‘{\\\}’, ‘_’, $xxx)
หลักการคือ ใช้ \ นำหน้า อักษรพิเศษนั่งเอง

ข้อมูลเพิ่มเติม
http://php.net/manual/en/regexp.reference.escape.php




วันพุธที่ 20 มีนาคม พ.ศ. 2556
Posted by caeruz

MySQL กับการสร้าง Functions ใช้งานเอง (User-Defined Functions to MySQL)


สำหรับ SQL นั้นมี ฟังก์ชันมาตรฐาน (Built-In Function) ที่สามารถใช้งานได้อย่างมีประสิทธิภาพ
และเตรียมไว้พร้อมสำหรับผู้ใช้งานอยู่แล้วสามารถเรียกใช้ได้เลย เช่น ฟังก์ชัน LEFT (string, length) , RIGHT (string, length) , MID (string, position, length)  เป็นต้น แต่บางครั้งข้อมูลที่เราต้องการอาจจะมีความจำเป็นที่จะต้องปรับแต่งข้อมูลก่อนเพื่อการแสดงผลที่ถูกต้องตามความต้องการ ซึ่งด้วยเหตุนี้นั่นเองจึงเป็นเหตุผลว่าทำไมเราจึงจำเป็นต้องสร้าง function ของ SQL ขึ้นมาไว้ใช้งานเอง              (User-Defined Function: UDF)  ฟังก์ชันที่เราสร้างเองเป็นยังไง และสามารถสร้างยังไง เรามาดูกันเลยครับ

ตัวอย่างการสร้างฟังก์ชั่นใช้งานเอง

CREATE FUNCTION `SumValues`(`Val1` int,`Val2` int) RETURNS int(11)
BEGIN
RETURN (Val1 + Val2);
END
จากตัวอย่าง เป็น function สำหรับหาผลรวมของตัวเลข ซึ่งเราสามารถเรียกใช้งานได้ดังนี้
SELECT SumValues(1,2) AS SumOfTwoValues

และผลลัพธ์ที่ได้คือ SumOfTwoValues >> 1+2 = 3 นั่นเอง

เราสามารถศึกษารายละเอียดเพิ่มเติมเกี่ยวกับ การเพิ่มฟังก์ชั่นใหม่ไปยัง MySQL ( UDF ) รวมถึง
ฟังก์ชันมาตรฐาน (Built-In Function) ต่างๆเพิ่มเติมได้ที่   http://dev.mysql.com/doc/




วันอังคารที่ 19 มีนาคม พ.ศ. 2556
Posted by caeruz

วิธีตรวจสอบคำสั่ง sql ที่ใช้สร้าง view ด้วย phpMyAdmin ( shows a create view statement that creates the given view )

จากบทความที่แล้ว  วิธีการง่ายๆกับการสร้าง View ใน SQL ( Sql Create View )  ที่พูดถึงรายละเอียดเกี่ยวกับวิธีการสร้าง view ภายใน SQL นั้น เชื่อว่าส่วนใหญ่คงทำเป็นกันบ้างแล้ว และเมื่อเราสามารถสร้าง view ขึ้นมาได้เรียบร้อยแล้ว แต่เมื่อวันเวลาผ่านไป จำนวนโครงสร้างตารางภายใน database อาจจะเริ่มซับซ้อนขึ้นเรื่อยๆ และเมื่อนานไป อาจจะทำให้เราลืมได้ว่า view ที่เราสร้างขึ้นมานั้น เราได้ใช้คำสั่ง sql ที่ใช้สร้าง view นั้นๆ ขึ้นมาอย่างไรบ้าง หรือในกรณีที่เรามาทำงานต่อกับคนอื่นก็อาจจะพบปัญหานี้ได้ ซึ่งจริงๆ แล้ว เราสามารถตรวจสอบคำสั่ง sql ที่ใช้สร้าง view นั้นๆ ได้ง่ายๆ

วิธีตรวจสอบคำสั่ง sql ที่ใช้สร้าง view ด้วย phpMyAdmin

1. Run sql statement ใน  phpmyadmin :  SHOW CREATE VIEW view_name ( ชื่อตาราง view )

2. ตรวจสอบ option  และเลือก  Full Texts


และเมื่อเลือก Full Texts  จะสังเกตุเห็นรายเอียดคำสั่ง sql ทั้งหมดที่ใช้สร้าง view นั้นๆ นั่นเอง

วันอาทิตย์ที่ 17 มีนาคม พ.ศ. 2556
Posted by caeruz

วิธีการง่ายๆกับการสร้าง View ใน SQL ( Sql Create View )

เชื่อว่าส่วนใหญ่ใครหลายๆ คนก็คงรู้จัก MySql กับการสร้าง view และการเรียกใช้งาน view กันอยู่แล้วแต่ก็ยังคงมีบางส่วนที่ยังไม่รู้จัก view ,วิธีการสร้าง view ภายใน SQL ,รวมถึงประโยชน์ของ view ที่เรา จะสามารถนำมาประยุกต์ใช้ร่วมกับงานของเรา View ใน MySQL View เปรียบเสมือน Table จำลองที่ผู้ใช้งานสร้างขึ้นมาเพื่อให้เห็นเฉพาะมุมมองของข้อมูลที่ต้องการ ใช้งาน ซึ่งข้อมูลอาจมาจาก ตาราง 1 ตาราง หรือ มาจากการ join กันของหลายตารางก็ได้ โดยส่วนใหญ่ เราจะใช้งาน view ก็ต่อเมื่อ มีการเรียกใช้ข้อมูลนั้นซ้ำๆเพื่อประหยัดเวลาในการเขียนคำสั่ง SQL เราเรียก ตารางข้อมูลประเภทนี้ว่า “ตารางเสมือน”

แล้วเราสามารถ สร้าง view ได้อย่างไร 
จากความสัมพันธ์ตามภาพด้านบนน่ะครับ เราสามารถรวมตาราง tb_order และ tbl_orderdetail เป็น view ได้ดังนี้

CREATE VIEW `product`.`order_detail_view` AS
SELECT tbl_order.order_id, tbl_order.order_date, tbl_order.order_time, 
tbl_orderdetail.product_id, tbl_orderdetail.qty,tbl_orderdetail.saleprice
FROM tbl_order , tbl_orderdetail
WHERE tbl_order.order_id = tbl_orderdetail.order_id;

จากตัวอย่างด้านบน เป็นการสร้าง view ชื่อว่า  order_detail_view และเราสามารถเรียกใช้งาน view ได้ดังนี้

SELECT * FROM order_detail_view

ซึ่งการเรียกใช้งานข้อมูลจากวิวนั้นเราสามารถเรียกใช้งานเหมือนกับคำสั่งการเรียกข้อมูลจากตารางข้อมูล
ทั่วไปนั้นเอง

คุณสมบัติของวิว 
-ค่าที่ปรากฎบนวิวเป็นค่าจริงในตารางข้อมูล 
-สามารถปรับปรุงข้อมูลในวิวได้ ถ้าได้รับการอนุญาตจากระบบจัดการฐานข้อมูลได้แก่(insert/update/delete)
-สามารถกำหนดสิทธิการใช้งานให้ผู้ใช้งานได้ว่าจะให้ใช้วิวหรือไม่ให้ใช้ เช่นเดียวกับตารางข้อมูล  โดยไม่ต้อง
 ยุ่งเกี่ยวกับตารางข้อมูลจริง 

-สามารถกำหนดเงื่อนไขการเรียกใช้ลงในวิวอย่างถาวร เพื่อให้ง่ายต่อผู้ใช้ 

 ประโยชน์ของวิว
 

- สามารถมีมุมมองต่างกันในข้อมูลที่แตกต่างกันได้โดยการจัดรูปแบบของโครงสร้างข้อมูลของวิวนี้จะทำให้
  ได้ข้อมูลทั้งแถวและคอลัมน์ตามที่ผู้ใช้งานต้องการเท่านั้น

- ลดคำสั่ง sql ในการเรียกใช้งานข้อมูล ทำให้ใช้งานได้สะดวกและง่ายต่อการเรียกข้อมูลมากขึ้น 

ข้อด้อยของวิว 
- ถ้าวิวสร้างมาจากตารางข้อมูลที่เชื่อมกันอย่างซับซ้อน ก็จะต้องกินเวลาในการทำงานนาน 
- สำหรับวิวที่ซับซ้อนก็จะจำกัดให้อ่านข้อมูลได้อย่างเดียว ไม่สามารถ UPDATE ข้อมูลได้ ตัวอย่างเช่น
  ข้อมูลที่ถูกเรียกโดย group by มาสร้างวิว



Posted by caeruz

ถ้าต้องการหาค่าที่แตกต่างกันใน อาร์เรย์ ทำอย่างไร ( find different value in array )


สืบเนื่องจาก วันนี้มีโปรแกรมเมอร์น้องใหม่ภายในแผนกเดินเข้ามาสอบถาม เกี่ยวกับว่าจะหา ค่าที่แตกต่างกันภายใน array นั้น จะทำอย่างไรได้บ้าง มี function ของ PHP ที่จะสามารถจัดการกับค่าเหล่านี้ได้หรือไม่ ? ตัวผมเองก็ความจำสั้น จำอะไรก็ไม่ค่อยได้ แต่พอนึกวิธีได้ในขณะนั้นก็เลยจัดแจง coding วิธีบ้านๆ ตามประสาคนความรู้น้อยให้น้องดูซะเลย (ไอ้เราก็ลืมเปิดดู manual ของ php  --*)

ดูตัวอย่าง การหาค่าที่แตกต่างกันใน อาร์เรย์

วิธีที่ 1.
$array = array('apple', 'orange', 'pear', 'banana', 'apple', 'pear', 'kiwi', 'kiwi');

$array_duplicate         = array();
$array_unique            = array();
$array_duplicate_cnt   = array();

foreach($array as $val){
 if(++$array_duplicate_cnt[$val] > 1){
  $array_duplicate[] = $val;
 }else{
    if( count (array_keys($array, $val)) == 1 ){ 
         $array_unique[]     = $val;
     }
 }
}

print_r($array_unique);
print_r($array_duplicate);


ผลลัพธ์ที่ได้
1.  ค่าที่แตกต่างกันใน อาร์เรย์ ( unique array )
Array
(
    [0] => orange
    [1] => banana
)

2.  ค่าที่เหมือนกันใน อาร์เรย์ ( duplicate array )
Array
(
    [0] => apple
    [1] => pear
    [2] => kiwi
)
อ้าาา .. แต่สำหรับ php แล้วการหาค่าที่แตกต่างกันภายใน อาร์เรย์ นั้น php ก็มี function ให้ใช้งานอยู่แล้วด้วย นั้นก็คือ array_unique() ซึ่งผลลัพธ์ที่ได้นั้น ก็จะเหมือนกับผลลัพธ์ แรกนั่นเอง สำหรับ Array Functions ใน php นั้นก็มี function  ให้เลือกใช้งานกันอยู่ โดยสามารถดูข้อมูลเพิ่มเติมได้ที่  php manual









วันพุธที่ 13 มีนาคม พ.ศ. 2556
Posted by caeruz

Categories

Popular Post

ขับเคลื่อนโดย Blogger.

- Copyright © Stimulus ♥ Hooked on Developer -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan - Yahoo bot last visit powered by MyPagerank.Net -

สะพานบอทฟรี - ติดgoogleอย่างง่าย ด้วยสะพานบอท