• September 10, 2018

    ในการเอาค่าที่รับมาจากผู้ใช้ไปรวมเป็น query ต้อง “escape” ค่าที่รับมาจากผู้ใช้ด้วยฟังก์ชั่นที่เหมาะสม (แล้วแต่ ชนิดของฐานข้อมูล) ก่อนที่จะนำไปใช้

    สำหรับ MySQL มีสองฟังก์ชั่น คือ mysql_escape_string() และ mysql_real_escape_string() แนะนำให้ใช้ตัวนี้

    $_POST['username'] = mysql_real_escape_string($_POST['username']);
    $_POST['password'] = mysql_real_escape_string($_POST['password']);
    $sql = "SELECT * FROM `member` WHERE `username` = '$_POST[username]' AND `password` = '$_POST[password]'";

    วิธีการสร้าง query
    ข้างบน สามารถทำให้โค้ดกระชับขึ้น ด้วยการหลีกเลี่ยงการกำหนดค่าลงตัวแปรด้วยการเชื่อมต่อสตริง

    ใช้การเชื่อมต่อสตริงเพื่อสร้าง SELECT query

    // ไม่ต้องมีการกำหนดค่าลงตัวแปรก่อนนำไปใช้
    // ลดขั้นตอนการทำงานของ PHP ลง
    // ประหยัดหน่วยความจำ
    $sql = "SELECT * FROM `member` WHERE `username` = '"
        . mysql_real_escape_string($_POST['username'])
        . "' AND `password` = '"
        . mysql_real_escape_string($_POST['password'])
        . "'";

    แต่อ่านยาก แก้ยาก เขียนผิดพลาดได้ง่าย
    ให้ใช้ฟังก์ชั่น sprintf() (เป็นฟังก์ชั่นที่ใช้ “แทนที่ค่าต่างๆ ลงใน string ตามรูปแบบที่ต้องการ”)

    รูปแบบการใช้ sprintf(รูปแบบค่าแทนที่)

    รูปแบบ
     คือ string ที่เครื่องหมาย % ตามด้วยอังกฤษบางตัว เช่น %s%d (การสร้าง query เราใช้แบบเดียวคือ %s) จะทำให้กลายเป็นจุดที่ค่าอื่นจะมาแทนที่ หากจะแสดงเครื่องหมาย % ต้องใช้ %%
    ค่าแทนที่ สามารถมีได้หลายค่า

    ตัวอย่างการใช้ sprintf()

    echo sprintf('I am %s years old.', 10);
    // %s คือจุดที่จะแทนที่ด้วยค่าอื่น ในที่นี้คือ 10 จะได้ผลเป็น
    // I am 10 years old.
    
    echo sprintf('I have %s brothers and %s sisters.', 2, 4);
    // ค่าแทนที่มากกว่า 1 ค่า
    // I have 2 brothers and 4 sisters.
    
    echo sprintf('<div style="width: %s%%">Hello World</div>', 50);
    // %% จะกลายเป็น %
    // <div style="width: 50%">Hello World</div>
    

    ใช้ sprintf() เพื่อสร้าง SELECT query ลองเปรียบเทียบกับการเชื่อมต่อสตริง แบบไหนอ่านง่ายกว่า?

    sql = sprintf(
    "SELECT * FROM `member` WHERE `username` = '%' AND `password` = '%s'",
    mysql_real_escape_string($_POST['username']), // %s ตัวที่หนึ่ง
    mysql_real_escape_string($_POST['password']) // %s ตัวที่สอง
    ); 
    

    ใช้ sprintf() เพื่อสร้าง INSERT query

    $sql = sprintf( ” INSERT INTO `members` (`id`, `username`, `password`, `first_name`, `last_name`) VALUES (”, ‘%s’, ‘%s’, ‘%s’, ‘%s’) “, mysql_real_escape_string($_POST[‘username’]), // %s ตัวที่ 1 mysql_real_escape_string($_POST[‘password’]), // %s ตัวที่ 2 mysql_real_escape_string($_POST[‘first_name’]), // %s ตัวที่ 3 mysql_real_escape_string($_POST[‘last_name’]) // %s ตัวที่ 4 );

     

    ใช้ sprintf() เพื่อสร้าง UPDATE query

    $sql = sprintf(

    UPDATE `members`
    SET
    `username` = ‘%s’,
    `password` = ‘%s’,
    `first_name` = ‘%s’,
    `last_name` = ‘%s’
    WHERE `id` = ‘%s’
    LIMIT 1
    “,
    mysql_real_escape_string($_POST[‘username’]), // %s ตัวที่ 1
    mysql_real_escape_string($_POST[‘password’]), // %s ตัวที่ 2
    mysql_real_escape_string($_POST[‘first_name’]), // %s ตัวที่ 3
    mysql_real_escape_string($_POST[‘last_name’]), // %s ตัวที่ 4
    mysql_real_escape_string($_POST[‘id’]) // %s ตัวที่ 5
    );

     



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories


Uncategorized